gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:32:08 25 4
gpt4 key购买 nike

我有一个 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 正在将每个对象转换为字符串,因为您已经告诉它您想要 List<String>

相反,请向 Jackson 索要 List<Object>并自己检查列表的内容,如果其中任何一个不是字符串,则抛出错误:

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我得到:

case is a: class java.lang.String
1 is a: class java.lang.Integer
Not a string!
2 is a: class java.lang.Integer
Not a string!
employee is a: class java.lang.String
1358444552861 is a: class java.lang.Long
Not a string!

关于java - 如何阻止 Jackson JSON 映射器隐式转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com