美文网首页
Java调用接口返回为数组格式接收方式

Java调用接口返回为数组格式接收方式

作者: 沁园Yann | 来源:发表于2022-03-10 17:05 被阅读0次

调用接口的返回参数都是如下格式:

{
  "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

相关文章

网友评论

      本文标题:Java调用接口返回为数组格式接收方式

      本文链接:https://www.haomeiwen.com/subject/lctqdrtx.html