У меня есть собственный класс сериализатора
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"}}
Это происходит случайно, скажем, для двух полей класса.
Есть идеи, что может вызвать это?
ОБНОВЛЕНИЕ:
Я думаю, что это было связано с тем, как метод получения / установки для объекта был назван.
@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» является заглавной буквой в getter / setter для aNewDate, и это вызывает некоторые проблемы.Не совсем уверен, что происходит, но относится к разделу 8.8 в этом документе: https://download.oracle.com/otn-pub/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/beans.101.pdf