停止Jackson将数字作为字符串读取

kninwzqo  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(134)

Jackson将输入的数字读作字符串。下面的一个例子是学生类将名称4567读作字符串。
例如:输入

{
name: 4567
...
}

Java类别

Class Student {

String name;
...
}

Jackson正在解析JSON文本并将数字值Map到字符串字段,我不希望进行类型转换,也就是将数字转换为字符串。在这个场景中,Jackson将值从int(4567)转换为String(“4567”)。如果提供的其他类型失败,该行为如何改变以抛出异常?

rqqzpn5f

rqqzpn5f1#

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

cgvd09ve

cgvd09ve2#

添加到application.properties

spring.jackson.mapper.allow-coercion-of-scalars=false

或者配置对象Map器(如bean)

objectMapper.configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, false);

相关问题