我有一个自定义的序列化程序类
public class LocalDateTimeSerializer extends StdSerializer<LocalDateTime>{
@Override
public void serialize(LocalDateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
// custom code to serialize
jgen.writeString(newValue);
}
我在类变量上如下使用它:
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime localDateTime;
现在,当我序列化为json时,响应日期时间将根据自定义逻辑按预期进行序列化。一切都很好。
但是在某些情况下,当字段被映射两次时,没有明显的原因。该类变量声明为与自定义序列化程序进行序列化完全相同,但是输出将为该变量提供两个字段。一种是期望的字段序列化。第二个是非序列化字段。看下面的输出:
"localDateTime": //as expected,
"localdateTime":{"year":2017,"month":"JUNE","monthValue":6,"dayOfMonth":29,"hour":20,"minute":0,"second":0,"nano":0,"dayOfWeek":"SATURDAY","dayOfYear":180,"chronology":{"calendarType":"iso8601","id":"ISO"}}
对于一个类的两个字段,这是随机发生的。
有什么原因会导致这种情况吗?
更新:
我认为这与实体的getter / setter命名方式有关。
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime aOldDate;
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime aNewDate;
public LocalDateTime getaOldDate() {
return aOldDate;
}
public void setaOldDate(LocalDateTime aOldDate) {
this.aOldDate= aOldDate;
}
public LocalDateTime getANewDate() {
return aNewDate;
}
public void setANewDate(LocalDateTime aNewDate) {
this.aNewDate= aNewDate;
}
如果我尝试序列化它,则aNewDate字段将在json中出现两次,而aOldDate将会出现一次。可能是因为'A'是aNewDate的getter / setter中的大写字母,这引起了一些问题。不完全确定会发生什么,但是与本文档的8.8节相关:https://download.oracle.com/otn-pub/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/beans.101.pdf