Jackson 将输入数字读取为字符串。作为下面的示例,学生类将名称 4567 读取为字符串。
例如:输入
{
name: 4567
...
}
Java 类
Class Student {
String name;
...
}
Jackson 正在解析 JSON 文本并将数字值映射到字符串字段,我不希望进行类型转换,即将数字转换为字符串。在这种情况下,Jackson 将值从 int (4567) 转换为 String("4567")。 如果提供的其他类型失败,此行为如何更改以引发异常?
最佳答案
为 java.lang.String
注册的自定义反序列化器应该绝对有效并让您阻止转换。反序列化器将通过 JsonParser
直接查看内容,因此它们可以检测底层 token 类型。
这将帮助您:
public class ForceStringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
if (jsonParser.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) {
throw deserializationContext.wrongTokenException(jsonParser, JsonToken.VALUE_STRING, "Attempted to parse int to string but this is forbidden");
}
return jsonParser.getValueAsString();
}
}
您可以找到更多信息 here .
关于java - 停止 Jackson 将数字读取为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55404706/