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

如何将JSON根节点未被对象包裹的属性拆分到多个Java模型类并解决反序列化报错

问题原因

首先明确两个核心问题:

  • JSON键与注解值大小写不匹配:你提交的JSON字段均为小驼峰格式(如documentType、ply、numberOfCopies),但Java类中@JsonProperty配置的是大驼峰值,首先就会导致属性映射失败。
  • 嵌套对象未配置解包规则:你将归属于Ply类的ply、numberOfCopies字段放在了JSON根节点,但A类中的Ply类型字段没有配置解包注解,Jackson默认会尝试从根节点下找名为ply的嵌套JSON对象来反序列化,实际拿到的是字符串"0",找不到对应的转换逻辑就抛出了该异常。

解决方案

使用Jackson提供的@JsonUnwrapped注解即可实现散列在根节点的属性映射到嵌套Java类的需求,修改步骤如下:

  1. 修正所有@JsonProperty的取值,和JSON中的键名完全匹配
  2. 在A类的嵌套业务对象字段上添加@JsonUnwrapped注解,通知Jackson将该类的属性提到父级节点匹配
  3. 修正嵌套业务类内部的@JsonProperty取值,和JSON根节点的对应字段匹配

修改后的代码示例

A类调整

public class A {
    // 修正JsonProperty值和JSON键名一致
    @JsonProperty("documentType")
    private String documentType;
    @JsonProperty("documentGroup")
    private String documentGroup;
    // 加@JsonUnwrapped解包,Ply类的属性直接从根节点匹配
    @JsonUnwrapped
    private Ply ply;
    @JsonProperty("tpDocNumbers")
    private List<String> tpDocNumbers;
    @JsonProperty("product")
    private Product product;
    // 其他属于根节点的散列属性对应的业务类,同样加@JsonUnwrapped
    @JsonUnwrapped
    private Cargo cargoInfo;
    @JsonUnwrapped
    private TaskCriteria taskCriteria;
    @JsonUnwrapped
    private Recipient recipientInfo;
    @JsonProperty("docBrokerDomain")
    private String docBrokerDomain;
    @JsonProperty("printerName")
    private String printerName;
    @JsonProperty("templateDomain")
    private String templateDomain;
    @JsonProperty("priority")
    private String priority;
    @JsonProperty("freeText")
    private String freeText;
    // 省略getter、setter
}

Ply类调整

public class Ply {
    // 对应JSON根节点的ply字段
    @JsonProperty("ply")
    private int plyNumber;
    // 对应JSON根节点的numberOfCopies字段
    @JsonProperty("numberOfCopies")
    private int copies;
    @JsonProperty("freightSelection")
    private String freightSelection;
    // 省略getter、setter,记得补充无参构造方法
}

如果你的其他业务类(如TaskCriteria、Recipient)的属性也是散列在JSON根节点的,按照同样的规则调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:45:04