You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON转Java类时如何严格校验属性值类型匹配

实现Jackson严格类型校验,禁止自动类型转换

默认情况下Jackson的ObjectMapper会自动完成跨类型转换(比如把JSON中的整数转成Java类的String字段),要实现严格的类型校验,只需要给ObjectMapper开启对应的反序列化特性即可。

核心配置

开启DeserializationFeature.FAIL_ON_NUMBERS_FOR_STRINGS特性,这个配置会强制检查JSON字段的原始类型与Java类字段类型是否匹配,当JSON是数字类型但Java字段是String类型时,直接抛出异常终止转换。

修改后的完整代码

String json = "{\"id\":1,\"name\":\"user1\"}";
ObjectMapper objectMapper = new ObjectMapper(new JsonFactory());

// 开启严格类型校验,禁止数字转字符串
objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_STRINGS, true);

try {
    Data data = objectMapper.readValue(json, Data.class);
    System.out.println(data);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

执行效果

此时运行代码会抛出com.fasterxml.jackson.databind.exc.MismatchedInputException异常,提示类型不匹配,不会完成转换:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from number 1: not a valid String representation
 at [Source: (String)"{"id":1,"name":"user1"}"; line: 1, column: 7] (through reference chain: Data["id"])

扩展:全面严格校验

如果需要更全面的类型严格校验,还可以开启以下特性:

  • FAIL_ON_STRING_FOR_NUMBERS:禁止JSON中的字符串转Java数字类型字段
  • FAIL_ON_NULL_FOR_PRIMITIVES:禁止null值赋值给Java基本类型字段
  • FAIL_ON_UNKNOWN_PROPERTIES:禁止JSON中出现Java类未定义的字段

添加这些配置后,ObjectMapper会对类型匹配做更严格的校验,确保JSON数据与Java类定义完全一致。

内容的提问来源于stack exchange,提问作者prince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:57:15