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

嵌套JSON反序列化问题:无法实例化DeviceActionList类

问题解决步骤

1. 补充无参构造函数

你的类通过@Builder和@AllArgsConstructor生成了全参构造,但Jackson反序列化需要无参构造来创建实例。给以下类添加对应注解:

  • DeviceActionList类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor // 新增无参构造注解
public class DeviceActionList {
    List<DeviceAction> actions;
}
  • DeviceAction类:因包含@NonNull字段,需用force=true强制生成无参构造:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor(force = true) // 新增,处理NonNull字段初始化问题
public class DeviceAction {
    @NonNull
    private ActionName actionName;
    private ActionAttributes actionAttributes;
}
  • LoginActionAttributes和PerformActionAttributes类同样补充:
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor(force = true) // 新增
public class LoginActionAttributes extends ActionAttributes {
    @NonNull
    private String emailId;
    @NonNull
    private String password;
}
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor(force = true) // 新增
public class PerformActionAttributes extends ActionAttributes {
    @NonNull
    private String contentId;
    @NonNull
    private String contentType;
}

2. 配置多态反序列化规则

ActionAttributes作为父类,JSON中的actionAttributes实际是其子类实例,需要告诉Jackson如何根据actionName匹配对应子类。在ActionAttributes类上添加Jackson多态注解:

@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
        property = "actionName" // 用同级的actionName字段值判断子类类型
)
@JsonSubTypes({
        @JsonSubTypes.Type(value = LoginActionAttributes.class, name = "LOGIN"),
        @JsonSubTypes.Type(value = PerformActionAttributes.class, name = "PERFORM")
})
public class ActionAttributes {
}

该配置逻辑:通过同级的actionName字段值,将LOGIN映射到LoginActionAttributes,PERFORM映射到PerformActionAttributes。

3. 验证反序列化

此时执行objectMapper.readValue(testInputString, DeviceActionList.class)即可完成正常反序列化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:15