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

Jackson映射JSON到Java模型类报UnrecognizedPropertyException如何解决

异常原因
  • 核心错误是Model类的属性类型定义错误:你在Model类中声明的model字段类型为Model本身,但JSON中models数组下每个model节点的内层是包含code、type等业务字段的对象,对应你预先定义的Model2类,类型不匹配导致Jackson在解析到code字段时,无法在Model类中找到对应属性,抛出未识别字段异常。
  • 存在同类潜在错误:FeatureType类中声明的feature_type字段类型为FeatureType本身,实际应该对应你定义的FeatureType2类,修复第一个错误后会触发同类异常。
  • 代码语法错误:你写的反序列化代码多了一个右括号,正确写法为om.readValue(myJsonString, Root.class)。
解决方案

方案1:直接修正现有类定义(成本最低)

仅需要修改两个类的属性类型即可正常运行:

// 修正Model类的属性类型
class Model{
    public Model2 model;
}

// 修正FeatureType类的属性类型
class FeatureType{
    public FeatureType2 feature_type;
}

修正后再修复反序列化代码的语法错误,即可完成正常映射。

方案2:优化类结构,减少冗余包装类(更易维护)

你当前的JSON结构存在多层不必要的对象包装,我们可以简化类定义,避免多余的空包装类,同时提升代码可读性:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.stream.Collectors;

// 直接映射业务模型字段,不需要额外的Model2类
class BizModel {
    public String code;
    public String type;
    public String source;
    public String name;
    @JsonProperty("feature_types")
    public List<BizFeatureType> featureTypes;
}

// 直接映射特征类型字段,不需要额外的FeatureType2类
class BizFeatureType {
    public String code;
    public String desc;
}

// 根节点类
public class Root {
    public List<ModelWrapper> models;

    // 内部类仅用于处理外层的model包装节点
    public static class ModelWrapper {
        @JsonProperty("model")
        public BizModel model;
    }

    // 内部类仅用于处理外层的feature_type包装节点
    public static class FeatureTypeWrapper {
        @JsonProperty("feature_type")
        public BizFeatureType featureType;
    }

    // 提供工具方法直接获取业务数据,屏蔽包装层细节
    public List<BizModel> getAllModels() {
        return models.stream()
                .map(wrapper -> wrapper.model)
                .collect(Collectors.toList());
    }
}

反序列化代码不需要额外修改,调用getAllModels()即可直接拿到所有业务模型数据,不需要逐层获取包装类属性。

临时兼容方案

如果不需要严格校验字段匹配,可以配置ObjectMapper忽略未知字段,避免报错(不推荐,会隐藏真实的字段匹配错误):

ObjectMapper om = new ObjectMapper();
om.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:06