【发布时间】:2019-08-19 15:26:48
【问题描述】:
Jackson 将输入数字读取为字符串。作为下面的示例,学生类将名称 4567 读取为字符串。
例如:输入
{
name: 4567
...
}
Java 类
Class Student {
String name;
...
}
Jackson 正在解析 JSON 文本并将数字值映射到字符串字段,我不希望类型转换,即将数字转换为字符串。在这种情况下,Jackson 将值从 int (4567) 转换为 String("4567")。 如果提供的其他类型失败,此行为如何更改以引发异常?
【问题讨论】:
-
@MS90 似乎您误读了这个问题。 Jackson 正在 解析 JSON 文本并将数字值映射到字符串字段,并且 OP 不希望进行类型转换,即将数字转换为字符串。基本上,OP 希望将 JSON 文本视为无效。
-
@MS90 OP 希望
name成为String,并希望确保在 解析/反序列化 JSON 时,该值是 JSON 字符串,例如"4567",不是 JSON 编号,例如4567。 Jackson 将值从int转换为String,这是一个非常有用的库,但 OP 希望它失败。 --- “如果他想对内容进行反序列化,他不会有任何问题” OP 的问题是它不会失败。 OP 想要失败。 OP 希望它成为一个问题。 -
@MS90 检查您的假设。 OP 没有将其序列化为 int。 OP 正在解析未知来源的 JSON,并希望 严格解析,以便在 JSON 值类型不正确时失败。为什么你认为 JSON 文本是由 Jackson 创建的?解释一下,问题只是说,“我有这个 JSON,要解析成这个对象,我希望它解析失败,因为类型错误”(“这行为如何改变抛出例外 ?").
-
感谢@Andreas 的所有澄清。详细说明需求。上面的 JSON 模式是暴露给客户端的 REST API 的一部分。在 API (Swagger) 'name' 参数中标记为字符串。但是现在客户端为它发送 int 并从我们这边(从 API)请求失败。
-
GitHub 上有类似的错误,您可以在其中找到使用默认解串器的解决方案。