java - 停止 Jackson 将数字读取为字符串

标签 java jackson jackson2

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/

相关文章:

java - 如何处理继承?

java - Vertx 3 - Java 序列化大对象

java - 在 POST 方法中将字符串发送到 Spring(Jackson) REST Controller

java - Gson 无法使用 Retrofit 正确地将 JSON 序列化为 POJO

java - 指定字段对于 MongoDB 是 transient 的,但对于 RestController 不是

java - 使用 Jackson 将转义的 json 解析为 JsonNode

java - 自定义 Jackson 反序列化 - 获取 com.fasterxml.jackson.databind.exc.MismatchedInputException : Unexpected end-of-input when binding data

java - 按号码调用电话,然后按 # 键

java - 无法在 hibernate 5.1.x 中显示整个表

java - 升级到 Java 11 后,由 IntelliJ 中的 : java. lang.ClassNotFoundException : com. Fasterxml.jackson.databind.ObjectMapper 引起