Если класс расширяет карту и включает в себя дополнительные поля. E.G - последняя измененная дата, Джексон, похоже, игнорирует любую вещь, не содержащуюся в качестве свойства карты.Карта сериала Джексона с дополнительными полями
У меня есть класс, который выглядит некоторые вещи, как следующее:
import java.io.IOException;
import java.time.OffsetDateTime;
import java.util.HashMap;
import java.util.Objects;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Foo extends HashMap<String, String> {
private OffsetDateTime lastModifiedTime;
public Foo() {
super();
lastModifiedTime = OffsetDateTime.now();
}
public void setLastModifiedTime(OffsetDateTime newTime) {
this.lastModifiedTime = newTime;
}
public OffsetDateTime getLastModifiedTime() {
return this.lastModifiedTime;
}
public static void main(String[] args) throws IOException {
Foo f = new Foo();
f.put("hello", "world");
ObjectMapper om = new ObjectMapper();
om.findAndRegisterModules();
String result = om.writeValueAsString(f);
if(f.equals(om.readValue(result, Foo.class))) {
System.out.println("Wooo");
} else {
System.out.println("Booo: " + result);
}
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Foo)) {
return false;
}
if (!super.equals(obj)) {
return false;
}
Foo foo = (Foo) obj;
return Objects.equals(getLastModifiedTime(), foo.getLastModifiedTime());
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), getLastModifiedTime());
}
}
Когда это работает выводит booo: {"hello":"world"}
Что не включает в себя дату последнего изменения.
Я попытался добавить @JsonInclude
аннотации к свойству и геттерам, но это не приводит к добавлению дополнительного поля.
Каков правильный способ заставить Джексона включить это дополнительное поле?
Не распространяйте HashMap. Создайте класс, в котором ** есть ** Карта и дополнительное поле вместо расширения HashMap. –
[Например] (http://stackoverflow.com/a/31307233/2587435) –
@JBNizet Ah, который работает. Был надеяться на аннотацию, чтобы избежать необходимости реализации ряда дополнительных методов (размер, пусто и т. Д.). Если кто-то из вас захочет выразить это как ответ, я соглашусь с ним. –