美文网首页
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