1、 接口json参数形式:
{
"code": "200",
"data": {
"bz": "",
"fxjg": [
{
"abcd": [
"/1/1.mp4",
"/1/2.mp4",
"/1/3.mp4",
"/1/4.mp4",
"/1/5.mp4"
]
},
{
"efgh": []
}
],
"zhuj": "202204220000000001",
"ertf": 5,
},
"message": "识别成功",
"qqshu": 4465765,
"signature": "周杰伦"
}
如上,是调用第三方接口后返回来的json数据,以上数据形式如下分析:
①数据的整体(最外层的大括号)可以封装成一个大的DTO用来接收调用接口成功后返回来的数据。DTO包含的成员变量就是大括号中的各项,如下:
@Data
@Accessors(chain = true)
public class GetParamterDTO implements Serializable {
private String code;
private String message;
private ProjectVideoDto data;
private Long qqshu;
private String signature;
}
②实体中又包含实体:可以看到,大参数实体中,又包含了一个小的实体data,所以此时需要继续创建一个实体来承接data并把这个实体封装到大实体GetParamterDTO中:
@Data
@Accessors(chain = true)
public class ProjectVideoDto implements Serializable {
private String bz;
private String zhuj;
private String ertf;
private List<Map<String, List>> fxjg;
}
注意:①无论是调用接口传参还是接收接口返回的数据,起的变量名一定要和参数中的Key值保持一致
②注意data参数中的fxjg,在返回的参数data中,他的格式是这样的:
"fxjg": [
{
"abcd": [
"/1/1.jpg",
"/1/2.jpg",
"/1/3.jpg",
"/1/4.jpg",
"/1/5.jpg"
]
},
{
"efgh": []
}
],
在实体类中的类型定义是:
private List<Map<String, List>> fxjg;
如下图所示,方括号代表数组,在Java中则用List表示,数组中的每个元素是json格式的数据,即Map形式,而Map中,key是字符串,value又是一个数组,所以最后的实体类定义形式如上所示。
2、多层结构嵌套json
接口json参数示例:
如上面表格示例,共有4个表格,因此,整体上有4个实体定义结构。
其中,范围最大的是第一个data参数数据,共有3个参数信息,其中sfzxx是一个json数组,也就是第二个表格;
同理,第二个表格中也包含了一个json数组jtzz,对应第三个表格;
dfxx对应第四个表格。
调用接口的传参示例如下:
{//最外层DTO,对应的第一个表格data参数
"xh": "679841fvgwe4+9",
"zy": "演员",
"sfzxx": [
{
"name": "刘亦菲",
"csrq": "1985年3月",
"jg": "籍贯北京市朝阳区"
"jtzz": [
{
"sheng": "安徽省",
"shi": "美女市",
"xian": "美女县",
"dfxx": [
{
"lb": "类别美女县",
"rksl": "200000"
},
{
"lb": "类别美女县",
"rksl": "200000"
},
{
"lb": "类别美女县",
"rksl": "200000"
}
]
},
{
"sheng": "安徽省",
"shi": "美女市",
"xian": "美女县",
"dfxx": [
{
"lb": "类别美女县",
"rksl": "200000"
},
{
"lb": "类别美女县",
"rksl": "200000"
}
]
},
]
},
{
"name": "刘亦菲",
"csrq": "1985年3月",
"jg": "籍贯北京市朝阳区"
"jtzz": [
{
"sheng": "安徽省",
"shi": "美女市",
"xian": "美女县",
"dfxx": [
{
"lb": "类别美女县",
"rksl": "200000"
},
{
"lb": "类别美女县",
"rksl": "200000"
}
]
}
]
},
{
"name": "刘亦菲",
"csrq": "1985年3月",
"jg": "籍贯北京市朝阳区"
"jtzz": [
{
"sheng": "安徽省",
"shi": "美女市",
"xian": "美女县",
"dfxx": [
{
"lb": "类别美女县",
"rksl": "200000"
},
{
"lb": "类别美女县",
"rksl": "200000"
}
]
}
]
}
]
}
java实体类定义:
/**
* 最外层data参数DTO实体,对应第一个表格
*/
@Data
public class DataDTO implements Serializable {
private String xh;//序号
private String zy;//职业
private List<SfzxxDTO> sfzxx;//Json数组,身份证信息
}
**
* 身份证信息实体DTO,对应第二个表格
*/
@Data
public class SfzxxDTO implements Serializable {
private String name;//姓名
private String csrq;//出生日期
private String jg;//籍贯
private List<JtzzDTO> jtzz;//Json数组,家庭住址
}
/**
* Json数组,家庭住址,对应第三个表格
*/
@Data
public class JtzzDTO implements Serializable {
private String sheng;//省
private String shi;//市
private String xian;//县
private List<DfxxDTO> dfxx;//Json数组,地方信息
}
/**
* 地方信息实体DTO,对应第4个表格
*/
@Data
public class DfxxDTO implements Serializable {
private String lb;//类别
private Long rksl;//人口数量
}
3、内部类的使用
json数据样例1:
{
"responseInfo":[
{
"code":"200",
"result":"success"
}
],
"requireWords":[
{
"pathType":"httpurl",
"wordsDetails":[
{
"wordIdType":"fergf",
"wordStatus":"cebri"
}
]
}
]
}
java代码:
package com.example.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class BaseResponse {
private List<ResponseInfo> responseInfo;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public static class ResponseInfo {
private String code;
private String result;
}
}
import lombok.*;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData extends BaseResponse {
private List<RequireWords> requireWords;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class RequireWords {
private String pathType;
private List<WordsDetails> wordsDetails;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class WordsDetails {
private String wordIdType;
private String wordStatus;
}
}
json数据样例2:
{
"fixFlowId":"hytjtkytuk",
"documentDetailInfo":{
"docIdCharacter":"645",
"proCharacter":"freiuwgwe",
"appLei":"H",
"appId":"654758@#$",
"docData":[
{
"binData":"64567",
"docFor":"trh6786"
}
]
}
}
java代码:
import lombok.*;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData {
private String fixFlowId;
private DocumentDetailInfo documentDetailInfo;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DocumentDetailInfo {
private String docIdCharacter;
private String proCharacter;
private String appLei;
private String appId;
private List<DocData> docData;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class DocData {
private String binData;
private String docFor;
}
}