Java 如何阻止Jackson JSON映射器隐式转换为字符串?
我有一个JSON数组,我想确保它只包含字符串。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
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)
添加自定义内容反序列化程序以进行检查。