我正在尝试使用两个公共类序列化POJO(EntriesResponse类),将其作为类中唯一属性(映射)的键/值对。 POJO目前仅保存此Hashmap,因此这是唯一要序列化的实体。问题是,如果Hashmap为空,我将得到如下输出:
{
"entries": {}
}
但是当我将任何键/值对放置到地图上时,什么都不会返回(实际上什么也没有)。因此,我猜想序列化地图时会出现问题,但是没有发现异常。到目前为止,我可以看到Key和Value类(它们都不相同)都具有toString,hashCode,equals等方法,我认为这是Jackson序列化所需的全部,但是我可能错了。我必须提到,这些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();
}
一个近端。上面的Map的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*/
}