为了账号安全,请及时绑定邮箱和手机立即绑定

将 JSON 反序列化为多态类型 弹簧启动

将 JSON 反序列化为多态类型 弹簧启动

慕哥9229398 2022-09-28 15:48:37
我正在从事一个电子政策项目,我需要保存不同类型的政策。为了简单起见,我只考虑两种类型的“人寿保险”和“自动保险”。我想实现的是,如果创建保单的JSON请求包含“类型”:“AUTO_INSURANCE”,那么该请求应映射到自动保险.class同样适用于LifeInsurance,但目前在春季启动应用程序中,请求将映射到父类策略,消除了汽车/人寿保险的特定请求字段。我创建的域模型如下所示。@Entity@Inheritance(strategy = InheritanceType.JOINED)@NoArgsConstructor@Getter@Setter@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")@JsonSubTypes({ @Type(value = AutoInsurance.class, name = "AUTO_INSURANCE"),    @Type(value = LifeInsurance.class) })public class Policy {    @Id    @GeneratedValue    private Long id;    private String policyNumber;    @Enumerated(EnumType.STRING)    private PolicyType policyType;    private String name;}我的自动保险类别如下。@Entity@NoArgsConstructor@Getter@Setter@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")@JsonTypeName(value = "AUTO_INSURANCE")public class AutoInsurance extends Policy {    @Id    @GeneratedValue    private Long id;    private String vehicleNumber;    private String model;    private String vehicleType;    private String vehicleName;}以下是人寿保险型儿童课程@Entity@NoArgsConstructor@Getter@Setter@JsonTypeName(value = "LIFE_INSURANCE")public class LifeInsurance extends Policy {    @OneToMany(mappedBy = "policy")    private List<Dependents> dependents;    private String medicalIssues;    private String medication;    private String treatments;}为了保存保单详细信息,我从UI发送JSON请求,其中包含一个“类型”属性,指示请求中的保险类型。我可以获取字符串,自动连线对象映射器和手动解析的JSON,但我想了解这是否是一个已知问题,以及是否有其他人在Spring boot中遇到过同样的情况。我已经搜索了这方面的解决方案,但我得到了反序列化到多态类的解决方案,但与Spring boot的问题无关。
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

在您的方法中,您尚未使用 注释方法参数。这导致 Spring 只创建一个实例,而不是使用 Jackson 来转换请求正文。Policy@RequestBodyPolicy


@PostMapping

public void savePolicy(@RequestBody Policy policy) {

    System.out.println(policy.getClass());

}

添加 将使 Spring 使用 Jackson 来反序列化请求正文,并且您的注释/配置将有效。@RequestBody


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号