调用接口的返回参数都是如下格式:
{
"data": [
{
"name":"张三",
"age":25
},
{
"name":"李四",
"age":26
}
],
"status": 1,
"msg": null
}
习惯性会封装一个最外层的对象来接收:
/**
* 最外层接收类
* (以下所有对象类为了看起来简洁均不写getter、setter方法)
*/
public class StudentResponse {
private List<StudentModel> data;
private Integer status;
private String msg;
}
/**
* 学生类
*/
public class StudentModel{
private String name;
private Integer age;
}
调用接口方法:
public List<StudentModel> getStudentModels(String startDate,String endDate) {
logger.info("进入查询学生记录方法");
long startTime = System.currentTimeMillis(); //获取开始时间
String url = httpQueryUtil.OVERDUE_URL + "/find/hp/sale/details?beginTime="+startDate+"&endTime="+endDate;//这里放你的url
logger.info("查询学生记录请求路径:{}",url);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<StudentResponse > entity = restTemplate.exchange(
url, HttpMethod.GET, null, StudentResponse .class);
long endTime = System.currentTimeMillis(); //获取结束时间
logger.info("获取查询学生记录运行时间为: " + (endTime - startTime) + "ms");
StudentResponse body = entity.getBody();
if(body != null){
if(body.getStatus() == 1){
logger.info("获取查询学生记录信息:{}",body.getData());
return body.getData();
}else {
logger.error("获取查询学生记录信息失败!");
return null;
}
}else {
logger.error("获取查询学生记录失败!");
return null;
}
}
这样就能接收到该接口返回的参数了。
但是,当接口返回的参数格式为下面这种情况:
[
{
"name": "张三",
"age": 47
}
]
很明显,最外层是一个list,如果我们还用上面所说的方式,封装一个最外层的实体类来接收,就会出现接收不到的情况。
如:
/**
* 最外层接收类
* (以下所有对象类为了看起来简洁均不写getter、setter方法)
*/
public class StudentModelList{
private List<StudentModel> data;
}
/**
* 学生类
*/
public class StudentModel{
private String name;
private Integer age;
}
这时不需要再封装最外面一层,直接用List<>StudentModel来接收即可。
调用方法如下,核心代码就一句:
public List<StudentModel> getStudentModels(String customerName) {
logger.info("进入查询学生信息方法");
long startTime = System.currentTimeMillis(); //获取开始时间
//设置请求头
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
List<String> list = new ArrayList<>();
list.add("application/json;charset=UTF-8");
headers.put("Content-Type", list);
String url = "http://xxx:29333/creditapi/guaranteesbyname?customername="+customerName;
logger.info("查询学生信息方法路径:{}",url);
RestTemplate restTemplate = new RestTemplate();
try {
ResponseEntity<List<StudentModel>> entity = restTemplate.exchange(url,
HttpMethod.GET, new HttpEntity<>(headers),
new ParameterizedTypeReference<List<StudentModel>>() {});
long endTime = System.currentTimeMillis(); //获取结束时间
logger.info("获取查询学生信息方法运行时间为: " + (endTime - startTime) + "ms");
List<StudentModel> body = entity.getBody();
return body ;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
如果list外面还有一层body,数据格式如下
{
"code": 200,
"msg": "success",
"body": {
"data": [
{
"name": "张三",
"age": 25
},
{
"name": "李四",
"age": 26
}
]
}
}
那么对应的实体应改成
/**
* 最外层接收类
* (以下所有对象类为了看起来简洁均不写getter、setter方法)
*/
public class StudentResponse {
private Integer code;
private String msg;
private ResponseBody body;
}
public class ResponseBody {
private List<StudentModel> data;
}
/**
* 学生类
*/
public class StudentModel{
private String name;
private Integer age;
}
原文链接:https://blog.csdn.net/weixin_44248000/article/details/114654885
网友评论