停止杰克逊读数字作为字符串

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

以上是关于停止杰克逊读数字作为字符串的主要内容,如果未能解决你的问题,请参考以下文章

Jackson怎么读 英语jackson怎么读

如何让fscanf自动在文件读结束时候停止执行

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

C语言怎样将数字从文件里逐个读取出来

一文读懂字节字符与字符编码