在我的数据传输对象中,我有一个声明
private Map<Long, StateDomain> stateDomains;
如果只是将其序列化为JSON,您将获得
{
stateDomains:[{"key1": stateDomain1}, {"key2": stateDomain2}...]
}
我不想要的相反,我希望它成为
{
stateDomains:[{stateDomain1}, {stateDomain2}...]
}
也就是说,仅将此地图的值序列化为列表,并放弃使用长键的配对。
杰克逊怎么能最好地做到这一点?
最佳答案
有两种方法可以执行此操作:
肮脏的方式:
更改stateDomains
的getter以仅返回StateDomain
的集合:
例如:
public Collection<StateDomain> getStateDomains() {
return stateDomains.values();
}
为地图创建自定义
serializer
:例如:
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;