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_Jackson - Fatal编程技术网

Java 如何阻止Jackson JSON映射器隐式转换为字符串?

Java 如何阻止Jackson JSON映射器隐式转换为字符串?,java,jackson,Java,Jackson,我有一个JSON数组,我想确保它只包含字符串。Jackson隐式地将整数和日期强制转换为字符串。我想确保JSON数组中的每个元素实际上都是字符串 Object[] badModuleArray = new Object[]{"case", 1, 2, "employee", new Date()}; ObjectMapper objectMapper = new ObjectMapper(); String jsonModules = objectMapper.writ

我有一个JSON数组,我想确保它只包含字符串。Jackson隐式地将整数和日期强制转换为字符串。我想确保JSON数组中的每个元素实际上都是字符串

    Object[] badModuleArray = new Object[]{"case", 1, 2, "employee", new Date()};

    ObjectMapper objectMapper = new ObjectMapper();
    String jsonModules = objectMapper.writeValueAsString(badModuleArray);

    try
    {
        TypeFactory typeFactory = TypeFactory.defaultInstance();
        mapper.readValue(modules, typeFactory.constructCollectionType(List.class, String.class));
    }
    catch(IOException e)
    {
        logger.error("something other than strings in JSON object");

    }

在上面的示例中,我希望ObjectMapper不要将整数、日期等强制转换为字符串。如果JSON数组中的每个元素不是字符串,我希望抛出一个异常。这可能吗?

Jackson将每个对象强制转换为一个字符串,因为您告诉它您需要一个
列表

相反,请Jackson提供一个
列表
,并亲自检查列表的内容,如果其中任何内容不是字符串,则抛出错误:

List list = objectMapper.readValue(jsonModules, typeFactory.constructCollectionType(List.class, Object.class));
for (Object item : list) {
    System.out.println(item + " is a: " + item.getClass());
    if (!(item instanceof String)) {
        System.out.println("Not a string!");
    }
}
对于
[“case”,1,2,“employee”,1358444552861]
的JSON,我得到:

大小写为:java.lang.String类
1是一个:类java.lang.Integer
不是一根绳子
2是一个:java.lang.Integer类
不是一根绳子
employee是一个类:java.lang.String
1358444552861是一个:类java.lang.Long
不是一根绳子


这是正确的。另一种可能是使用
@jsondeseligate(contentUsing=MyValueDeserializer.class)
添加自定义内容反序列化程序以进行检查。