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

使用Jackson注解将JSON列表反序列化为自定义包装类

解决方法:用Jackson注解将JSON数组反序列化为包装类

这个需求其实挺常见的,Jackson给了很简洁的实现方式,我给你两种实用的方案:

方案一:通过带@JsonCreator注解的构造方法实现

这是最直接的方式,让Jackson把整个JSON数组当作构造参数,直接赋值给包装类的items属性:

首先定义你的MyClass(确保它能被Jackson正常序列化/反序列化,一般只要有Getter/Setter或者默认构造方法就行):

public class MyClass {
    private String name;
    // 你的其他字段

    // Getter和Setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然后定义MyWrapper类,给接收List<MyClass>的构造方法加上@JsonCreator注解:

public class MyWrapper {
    private List<MyClass> items;

    // 用@JsonCreator告诉Jackson:这个构造方法用来处理JSON数组
    @JsonCreator
    public MyWrapper(List<MyClass> items) {
        this.items = items;
    }

    // Getter和Setter
    public List<MyClass> getItems() {
        return items;
    }

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

最后反序列化的代码就和平时一样:

ObjectMapper mapper = new ObjectMapper();
// 假设你的JSON是这样的数组格式
String jsonArray = "[{\"name\":\"张三\"},{\"name\":\"李四\"}]";
MyWrapper wrapper = mapper.readValue(jsonArray, MyWrapper.class);

方案二:通过静态工厂方法+@JsonCreator实现

如果你不想修改类的构造方法(比如已有其他构造逻辑),可以用静态工厂方法来包装:

public class MyWrapper {
    private List<MyClass> items;

    // 保留默认构造方法
    public MyWrapper() {}

    // 静态工厂方法,用@JsonCreator标记为反序列化入口
    @JsonCreator
    public static MyWrapper fromList(List<MyClass> items) {
        MyWrapper wrapper = new MyWrapper();
        wrapper.setItems(items);
        return wrapper;
    }

    // Getter和Setter
    public List<MyClass> getItems() {
        return items;
    }

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

这种方式和方案一效果完全一样,只是更灵活,适合已有复杂构造逻辑的场景。

注意事项

  • 确保你的MyClass符合Jackson的序列化要求:要么有默认无参构造方法,要么给构造方法加@JsonCreator和@JsonProperty注解(如果是带参构造)。
  • 如果你用的是Jackson 2.x以上版本,这些注解都在com.fasterxml.jackson.annotation包下,记得引入对应的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:35:03