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

Jackson将字符串转Java对象报UnrecognizedPropertyException怎么解决

异常原因分析

1. 转义处理逻辑错误

你代码中String sample = content.replaceAll("\\\\", " ");的逻辑完全不符合预期:
Sample.txt存储的是带转义符的JSON串,\"表示转义双引号,你把反斜杠替换为空格后,原内容\"Code\"会变成"Code ",JSON键名末尾多了空格,和POJO字段完全无法匹配,异常信息里提示的Unrecognized field "Code "末尾带空格就是直接证据。

2. Jackson默认字段映射规则不匹配

Jackson默认遵循JavaBean命名规范,会自动将POJO字段首字母转为小写后匹配JSON键:
你POJO中定义的private String Code;会被Jackson识别为code,但JSON中的键是大写开头的Code,两者无法对应。

解决方案

第一步:修复转义处理逻辑

首先把转义处理的代码修改为删除反斜杠,而不是替换为空格:

// 删掉错误的替换逻辑,替换为下面的代码
String sample = content.replaceAll("\\\\", "");

第二步:任选以下一种方案解决字段匹配问题

方案A:全局配置Jackson命名策略(推荐)

给ObjectMapper配置适配大写开头驼峰的命名策略,无需修改POJO代码:

ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);

方案B:POJO字段加@JsonProperty注解显式绑定

在每个POJO字段上添加注解,手动指定对应的JSON键名:

@JsonProperty("Code")
private String Code;
@JsonProperty("QuestionCode")
private String QuestionCode;
@JsonProperty("Description")
private String Description;
@JsonProperty("Type")
private String Type;
@JsonProperty("LastUpdated")
private String LastUpdated;

方案C:临时忽略未知字段(仅调试用,不推荐)

如果不需要严格校验字段,只想快速避免报错,可以配置Jackson忽略无法识别的字段:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

注意:该方案仅抑制异常抛出,字段仍然会因为匹配失败赋值为null,不适合正式环境使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:04