我们有一个表示某种配置的结构。我们有一个错误的词周期性,它被错误地拼写为'o‘作为周期*o*城市。下面的示例源是更正的源。但是,我需要能够读取旧的配置文件来保持向后兼容性。
我可以让Jackson识别反序列化中拼写错误的字段/属性,但是在序列化时忽略它吗?
我们使用的是Jackson的2.6.6版本。
package foo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
@JsonInclude(Include.NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Rule {
private LogPeriodicity periodicityLevel;
private Integer periodicity;
// ctors and some other methods omitted for brevity
public LogPeriodicity getPeriodicityLevel() {
return periodicityLevel;
}
public void setPeriodicityLevel(LogPeriodicity periodicityLevel) {
this.periodicityLevel = periodicityLevel;
}
public Integer getPeriodicity() {
return periodicity;
}
public void setPeriodicity(Integer periodicity) {
this.periodicity = periodicity;
}
}发布于 2016-05-04 15:28:51
如果我没弄错你的问题你想要这样的东西?
MyClass obj = mapper.readValue("{ \"name\" : \"value\"}", MyClass.class);
String serialized = mapper.writeValueAsString(obj);
MyClass obj2 = mapper.readValue("{ \"name2\" : \"value\"}", MyClass.class);
String serialized2 = mapper.writeValueAsString(obj2);
if( Objects.equals(serialized2, serialized))
System.out.println("Success " + serialized + " == " + serialized2 );如果您不想在POJO中添加额外的字段,只需添加这样的setter:
public static class MyClass {
@JsonProperty
private String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@JsonSetter
public void setName2(String name2) {
setName(name2);
}
}您可能还可以注册遗留的Mixin而不是@JsonSetter。
public abstract class LegacyMyClassMixIn{
@JsonProperty("name")
private String name;
@JsonGetter("name")
public abstract String getName();
@JsonSetter("name2")
public abstract void setName(String name) ;
}像这样使用它:
SimpleModule module = new SimpleModule();
module.setMixInAnnotation(MyClass.class, LegacyMyClassMixIn.class);
mapper2.registerModule(module);顺便说一下,在Gson中,只需1行@SerializedName(value="name", alternate={"name2"}) public String name = null;就可以完成。
https://stackoverflow.com/questions/37030791
复制相似问题