停止杰克逊读数字作为字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了停止杰克逊读数字作为字符串相关的知识,希望对你有一定的参考价值。
杰克逊将输入数字作为字符串读取。作为下面的示例,Student类将名称4567读为String。
例如:输入
{
name: 4567
...
}
Java类
Class Student {
String name;
...
}
Jackson正在解析JSON文本并将数值映射到字符串字段,我不希望进行类型转换,即将数字转换为字符串。在这种情况下,Jackson将值从int(4567)转换为String(“4567”)。如果提供的其他类型失败,此行为如何更改以引发异常?
答案
为java.lang.String
注册的自定义反序列化器肯定会起作用,让您防止转换。反序列化器将直接通过JsonParser
查看内容,以便他们可以检测基础令牌类型。
这将有助于您:
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。
以上是关于停止杰克逊读数字作为字符串的主要内容,如果未能解决你的问题,请参考以下文章