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

Jackson ObjectMapper读JSON转List报UnrecognizedPropertyException

异常原因

这个报错核心是反序列化的目标类型和JSON实际结构不匹配:

  • 你拿到的JSON根节点是一个对象(最外层用{}包裹),并不是直接的Items数组,真正的Items对象数组是根对象下名为Items(报错日志里实际传入的JSON为小写items)的属性值。
  • 你当前的代码直接把整个JSON映射为Items[]类型,Jackson会尝试把根对象的每个属性和Items类的成员变量做匹配,但Items类只有mode、processing两个字段,找不到和外层items/Items属性对应的成员变量或setter方法,因此抛出未识别属性的异常。

修复方法

可以任选以下一种方案调整代码:

方案1:定义外层包装类(类型安全,最推荐)

新增一个和JSON根结构对应的包装类,映射外层的数组属性:

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

public class ItemsWrapper {
    // 如果实际JSON里是小写items,把注解内的值改为"items"即可
    @JsonProperty("Items")
    private List<Items> items;

    public List<Items> getItems() {
        return items;
    }

    public void setItems(List<Items> items) {
        this.items = items;
    }
}

调整反序列化逻辑:

ObjectMapper mapper = new ObjectMapper();
ItemsWrapper wrapper = mapper.readValue(json, ItemsWrapper.class);
List<Items> actions = wrapper.getItems();

方案2:通过树模型定位目标节点(无需新增额外类)

先将JSON解析为树形结构,定位到存储数组的节点后再做类型转换:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.List;

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json);
// 注意字段名和实际JSON匹配,小写键就传入"items"
List<Items> actions = mapper.readValue(
        rootNode.get("Items").traverse(),
        new TypeReference<List<Items>>() {}
);

额外提醒:Jackson默认对字段名大小写敏感,你贴出的示例JSON键名是大写开头Items,但报错日志里的实际JSON键名是小写开头items,反序列化时一定要保证字段映射名和实际JSON键名完全一致,否则依然会抛出属性找不到的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:45:27