Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson json将字符串和数组绑定到列表<;字符串>;在地图里面_Java_Json_Spring_Spring Boot_Jackson - Fatal编程技术网

Java Jackson json将字符串和数组绑定到列表<;字符串>;在地图里面

Java Jackson json将字符串和数组绑定到列表<;字符串>;在地图里面,java,json,spring,spring-boot,jackson,Java,Json,Spring,Spring Boot,Jackson,我想将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() {

我想将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;
    }

}
公共类MyDTO{
私有字符串标识符;
@JsonFormat(with=Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
私有映射参数;
公共字符串getIdentifier(){
返回标识符;
}
公共无效集合标识符(字符串标识符){
this.identifier=标识符;
}
公共映射getParameters(){
返回参数;
}
公共void setParameters(映射参数){
此参数=参数;
}
}
我希望以下两个json示例都能正确映射到上面的Java类

//样本1

{“标识符”:“myIdentifier”,“参数”:{ “参数1”:“值”}

//样本2

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

我已经尝试使用ACCEPT\u SINGLE\u VALUE\u作为映射属性的\u数组,但我认为它没有应用到内部列表

有什么解决办法吗


谢谢。

@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
}