Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
Jackson检测重复的JSON POJO属性和映射键_Json_Jackson - Fatal编程技术网

Jackson检测重复的JSON POJO属性和映射键

Jackson检测重复的JSON POJO属性和映射键,json,jackson,Json,Jackson,我正在尝试捕获重复的POJO属性或映射键是否已通过我的Web服务 例如,如果field1出现两次或map key1出现两次,我想抛出一个错误: { "field1" : 1, "field1" : 2, "map" : { "1" : { "fieldA" : "null", "fieldB" : "2" }, "1" : { "fieldX" : "null", "fieldY" : "2" } }

我正在尝试捕获重复的POJO属性或映射键是否已通过我的Web服务

例如,如果
field1
出现两次或map key
1
出现两次,我想抛出一个错误:

{
  "field1" : 1,
  "field1" : 2,
  "map" : {
    "1" : {
      "fieldA" : "null",
      "fieldB" : "2"
    },
    "1" : {
      "fieldX" : "null",
      "fieldY" : "2"
    }
  }
}

请看下面的讨论:

下面是一个Map类的示例代码:

public class JacksonDuplicates {

    private static final String JSON = "{\n" +
            "  \"field1\" : 1,\n" +
            "  \"field1\" : 2,\n" +
            "  \"map\" : {\n" +
            "    \"1\" : {\n" +
            "      \"fieldA\" : \"null\",\n" +
            "      \"fieldB\" : \"2\"\n" +
            "    },\n" +
            "    \"1\" : {\n" +
            "      \"fieldX\" : \"null\",\n" +
            "      \"fieldY\" : \"2\"\n" +
            "    }\n" +
            "  }\n" +
            "}";

    private static class SingleKeyHashMap<K, V> extends HashMap<K, V> {
        @Override
        public V put(K key, V value) {
            if (containsKey(key)) {
                throw new IllegalArgumentException("duplicate key " + key);
            }
            return super.put(key, value);
        }
    }

    public static void main(String[] args) throws IOException {
        SimpleModule module = new SimpleModule();
        module.addAbstractTypeMapping(Map.class, SingleKeyHashMap.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(module);

        mapper.readValue(JSON, Map.class);

    }
}

可以使用
JsonParser.Feature.STRICT\u DUPLICATE\u检测

ObjectMapper mapper = new ObjectMapper();
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
MyPOJO result = mapper.readValue(json, MyPOJO.class);
结果:

com.fasterxml.jackson.core.JsonParseException: Duplicate field 'field1'

发布关于反序列化功能的帖子。读取DUP树键失败

如何在JAX-RS应用程序中配置此功能?根据您的用例,有几种方法可以实现这一点。例如,描述了如何为给定的mime类型配置对象映射器。我认为我找到了一个技术上可行的解决方案,但它是一个黑客。瓦伦的答案是“正确的”。
com.fasterxml.jackson.core.JsonParseException: Duplicate field 'field1'