Я пытаюсь сериализовать POJO (класс EntriesResponse) с двумя открытыми классами как пары ключ / значение единственного атрибута (Map) в классе.POJO только пока хранит эту Hashmap, так что это единственная сущность для сериализации.Проблема в том, что если Hashmap пуст, я получаю вывод, подобный этому:
{
"entries": {}
}
Но когда я помещаю любую пару ключ / значение на карту, тогда ничего не возвращается (буквально ничего).Поэтому я предполагаю, что существует проблема с сериализацией карты, но исключений не обнаружено.Пока я вижу, что оба класса Key и Value (которые не совпадают) имеют методы toString, hashCode, equals и т. Д., И я подумал, что это все, что Джексону нужно было сериализовать, но я могу ошибаться.Я должен упомянуть, что эти KeyClass и ValueClass (показанные на карте ниже) являются открытыми классами, но я не желаю расширять их или модифицировать их (если это возможно), поэтому я ищу решение, в котором нет модификации или расширения этих классов.необходимо.Я попытался вернуть атрибуты типа Map, и это сработало так, как я уже сказал, что я уверен, что ошибка возникает из-за использования специальных классов ключа и значения.
Некоторые примеры классов Java, упомянутых выше:
EntriesResponse (POJO):
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"entries"
})
public class EntriesResponse implements Serializable {
@JsonProperty("entries")
private Map<KeyClass, ValueClass> mapEntries = null;
public EntriesResponse(){
this.mapEntries = new HashMap<>();
}
public Map<KeyClass, ValueClass> getMapEntries () {
return this.mapEntries ;
}
public void setMapEntries (Map<KeyClass, ValueClass> mapEntries) {
this.mapEntries = mapEntries;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof EntriesResponse )) {
return false;
}
EntriesResponse that = (EntriesResponse ) o;
return Objects.equals(getMapEntries(), that.getMapEntries());
}
@Override
public int hashCode() {
return Objects.hash(getMapEntries());
}
}
Как я сериализую POJO:
ObjectMapper mapper = new ObjectMapper();
String json = "";
try {
json = mapper.writeValueAsString(entriesResponse);
} catch (Exception e) {
e.printStackTrace();
}
АпроксПример KeyClass (также может применяться для ValueClass) приведенной выше карты:
public class KeyClass{
/*A prioiri, irrelevant code here*/
@Override
public int hashCode() {
return /*Code*/;
}
@Override
public boolean equals(final Object o) {
/*Code*/
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder(/*size*/);
/*More code*/
return builder.toString();
}
/*A priori, irrelevant code here*/
}