【发布时间】:2015-08-18 16:06:25
【问题描述】:
在我的 pojo 类中,我配置了一个带有注释的 CustomDeserializer
@JsonDeserialize(using = CustomDeserializer.class)
class Myclass {
private String A;
@JsonIgnore
private String B;
@JsonIgnore
private String C;
private String D;
...
private String Z;
/*getters and setters*/
}
在CustomDeserializer,我只想管理一些字段,其余的留给Jackson 管理。
CustomDeserializer.java
public class CustomDeserializer extends StdDeserializer<Myclass > {
private static final long serialVersionUID = 4781685606089836048L;
public CustomDeserializer() {
super(Myclass.class);
}
@Override
public Myclass deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, IllegalResponseException {
ObjectMapper mapper = (ObjectMapper) jp.getCodec();
ObjectNode root = (ObjectNode) mapper.readTree(jp);
Myclass myClass = mapper.readValue(root.toString(), Myclass.class);
//--- HERE MANAGE FIELD B ---
myClass.setB(myNewB);
//--- HERE MANAGE FIELD C ---
myClass.setC(myNewC);
return myClass;
}
}
这样我会因为下面的行而陷入无限循环:
mapper.readValue(root.toString(), Myclass.class);
有没有办法在使用 Jackson 时设置默认行为,以便我可以排除我的 CustomDeserializer?
【问题讨论】:
-
你的意思是你只想要一个默认的反序列化?
-
简而言之,我想使用 CustomDeserializer 作为我的默认反序列化器,并在 CustomDeserializer 内部使用杰克逊默认反序列化器
-
好的,请看一下我建议的答案,可能对你有用
标签: java jackson deserialization