【问题标题】:Jackson json bind String and Array to List<String> inside a MapJackson json 将 String 和 Array 绑定到 Map 中的 List<String>
【发布时间】:2016-07-04 06:49:08
【问题描述】:

我想将 json 字符串和数组映射到 Java 列表。 Java类如下。

public class MyDTO {

    private String identifier;


    @JsonFormat(with=Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
    private Map<String, List<String>> parameters;

    public String getIdentifier() {
        return identifier;
    }
    public void setIdentifier(String identifier) {
        this.identifier = identifier;
    }
    public Map<String, List<String>> getParameters() {
        return parameters;
    }
    public void setParameters(Map<String, List<String>> parameters) {
        this.parameters = parameters;
    }

}

我希望以下两个 json 示例都能正确映射到上述 Java 类。

//样本1

{ “标识符”:“我的标识符”,“参数”:{ "param1": "值" } }

//样本2

{ “标识符”:“我的标识符”,“参数”:{ "param1": ["value1", "value2"] } }

我尝试将 ACCEPT_SINGLE_VALUE_AS_ARRAY 用于 Map 属性,但我认为它没有应用于内部列表

有什么解决办法吗?

谢谢。

【问题讨论】:

    标签: java json spring spring-boot jackson


    【解决方案1】:

    @JsonFormat 不是配置此类反序列化的适当注释。基于注解的 POJO 配置不会产生正确的结果。相反,接受原始 JSON 字符串,然后使用具有所需配置的 objectmapper 进行反序列化

    String json1 = "{ \"identifier\": \"myIdentifier\", \"parameters\":{ \"param1\": \"value\" } }\n";
    String json2 = "{ \"identifier\": \"myIdentifier\", \"parameters\":{ \"param1\": [\"value1\", \"value2\"] } }";
    ObjectMapper mapper = new ObjectMapper();
    //mapper.enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    try {
      MyDTO obj1 = mapper.readValue(json1, MyDTO.class);
      MyDTO obj2 = mapper.readValue(json2, MyDTO.class);
    }catch (Exception e){
      // handle
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 2020-04-01
      • 2018-09-22
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多