gpt4 book ai didi

java - JSON - 使用 Jackson 仅序列化 Map 的 "values"

转载 作者:行者123 更新时间:2023-12-02 12:08:48 24 4
gpt4 key购买 nike

在我的数据传输对象中,我有一个声明

private Map<Long, StateDomain> stateDomains;

如果你只是将其序列化为 JSON,你将得到

{
stateDomains:[{"key1": stateDomain1}, {"key2": stateDomain2}...]
}

我不想要。相反,我希望它成为

{
stateDomains:[{stateDomain1}, {stateDomain2}...]
}

也就是说,仅将此映射的值序列化为列表,并丢弃与长键的配对。

jackson 如何才能最好地实现这一目标?

最佳答案

有两种方法可以执行此操作:

  1. 肮脏的方式:

更改 stateDomains 的 getter 以仅返回 StateDomain 的集合:

例如:

public Collection<StateDomain> getStateDomains() {
return stateDomains.values();
}
  • 为 map 创建自定义序列化器:
  • 例如:

    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;

    关于java - JSON - 使用 Jackson 仅序列化 Map 的 "values",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46703039/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com