在我的数据传输对象中,我有一个声明
private Map<Long, StateDomain> stateDomains;
如果您只是将其序列化为JSON,那么您将获得
{
stateDomains:[{"key1": stateDomain1}, {"key2": stateDomain2}...]
}
我不想。相反,我希望它成为
{
stateDomains:[{stateDomain1}, {stateDomain2}...]
}
即,仅将此地图的值序列化为List,并放弃与Long键的配对。
杰克逊怎么能最好地实现这一目标?
答案 0 :(得分:1)
有两种方法可以执行此操作:
更改stateDomains
的getter以仅返回StateDomain
的集合:
E.g:
public Collection<StateDomain> getStateDomains() {
return stateDomains.values();
}
serializer
:E.g:
class CustomSerializer extends JsonSerializer<Map<Long, StateDomain>> {
@Override
public void serialize(final Map<Long, StateDomain> value, final JsonGenerator jgen, final SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeObject(value.values());
}
}
在DTO中添加序列化程序:
@JsonSerialize(using = CustomSerializer.class)
private Map<Long, StateDomain> stateDomains;