Spring RestTemplate 映射复杂(嵌套)实体类

Spring RestTemplate 映射复杂(嵌套)实体类

项目场景:

RestTemplate调用远程接口映射值


问题描述:

  • 【说明】:
    1、远程请求响应结果为对象中嵌套list
    2、外层实体类属性存在数据
    3、 list中实体类映射为null

在这里插入图片描述


代码:

【controller层】

@RestController
@RequestMapping("/CaseRecord")
public class CaseRecordController {

    @Resource
    RestTemplate restTemplate;

    @GetMapping("/getEmrVisitInfo")
    public AjaxResult getEmrVisitInfo() {

        String url = "https://www.fastmock.site/mock/d68caaaf31d14183e559e0591316fdfb/xikang/geturl";
        ResponseEntity<Root> rootResponseEntity = restTemplate.getForEntity(url, Root.class);
        System.out.println(rootResponseEntity);
        return null;
    }
}

【Entity层】:
【Root.java】:

package com.ruoyi.xikang.entity.medic;

import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.ruoyi.xikang.entity.JsonRootBeanEntity;
import lombok.Data;

import java.util.List;

@Data
public class Root {
    @JsonUnwrapped
    private List<JsonRootBeanEntity> datalist;

    private String msg;

    private String status;
}

【JsonRootBeanEntity.java】:

/**
 * Copyright 2021 bejson.com
 */
package com.ruoyi.xikang.entity;

import lombok.Data;

import java.util.Date;

/**
 * Auto-generated: 2021-08-02 10:51:32
 *
 * @author bejson.com (i@bejson.com)
 * @website http://www.bejson.com/java2pojo/
 */

@Data
public class JsonRootBeanEntity {
    
    private String BED;
    private String BODYPART_CODE;
    private Date BUSINESS_DATE;
    private String CARDNO;
    private String CARDTYPE;
    private String CYRQ;
    private String DOCUMENTID;
    private String DPT_CODE;
    private String DPT_NAME;
    private String INSERTDATE;
    private String MDIS_CODE;
    private String MDIS_NAME;
    private String MEDICINE;
    private String NAME;
    private String OP_EM_NO;
    private String OP_EM_NO_MARK;
    private String RYRQ;
    private String TABLENAME;
    private String TABLEPK;
    private String UNITCODE;
    private String UNITNAME;
    private String UPDATEDATE;
    private String WARD_NAME;

}

【数据格式】:

{
  "datalist": [{
      "BED": "20210301",
      "BODYPART_CODE": "202103011",
      "BUSINESS_DATE": "2020-07-30",
      "CARDNO": "xxxx",
      "CARDTYPE": "01",
      "CYRQ": "20210301133028",
      "DOCUMENTID": "",
      "DPT_CODE": "A99",
      "DPT_NAME": "其他科室",
      "INSERTDATE": "",
      "MDIS_CODE": "N76.121",
      "MDIS_NAME": "慢性炎",
      "MEDICINE": "妇用抗菌洗液",
      "NAME": "王钱",
      "OP_EM_NO": "32130",
      "OP_EM_NO_MARK": "1",
      "RYRQ": "202007338",
      "TABLENAME": "",
      "TABLEPK": "",
      "UNITCODE": "321311PDY41",
      "UNITNAME": "医院",
      "UPDATEDATE": "",
      "WARD_NAME": ""
    },
    {
      "BED": "20210",
      "BODYPART_CODE": "",
      "BUSINESS_DATE": "2020-06-29",
      "CARDNO": "xxxx",
      "CARDTYPE": "01",
      "CYRQ": "2021030113",
      "DOCUMENTID": "",
      "DPT_CODE": "A.01",
      "DPT_NAME": "普业",
      "INSERTDATE": "",
      "MDIS_CODE": "N61.x04",
      "MDIS_NAME": "乳炎",
      "MEDICINE": "",
      "NAME": "王勤",
      "OP_EM_NO": "3348",
      "OP_EM_NO_MARK": "1",
      "RYRQ": "20200629",
      "TABLENAME": "",
      "TABLEPK": "",
      "UNITCODE": "321302",
      "UNITNAME": "第一人民医院",
      "UPDATEDATE": "",
      "WARD_NAME": ""
    }
  ],
  "msg": "查询成功!",
  "status": "success"
}

原因分析:

【参考】:https://www.it1352.com/1568252.html

  • 【分析】:
    1、响应信息中外层属性有值,内层为空
    2、可能是内层类型有关
    3、尝试将list中类型改成Object尝试
private List<JsonRootBeanEntity> datalist; => private List<Object> datalist;

在这里插入图片描述

  • 【说明】:
    1、数据装载成功
    2、注意list中类型为LinkedHashMap
    3、因此可能和属性映射有关

解决方案:

1、在外层实体类的list上添加@JsonUnwrapped注解
2、在list中类属性上添加@JsonProperty注解
在这里插入图片描述

  • 【说明】:
    1、此时list中类型修改成自定义类型
    2、@JsonUnwrapped:扁平对象
    3、@JsonProperty:把该属性的名称序列化为另外一个名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值