用Jackson进行LocalDateTime序列化会导致字段出现两次

时间:2019-06-24 17:49:30

标签: serialization java-8 jackson jersey

我有一个自定义的序列化程序类

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

0 个答案:

没有答案