欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java Springboot使用RestTemplate发送http请求

程序员文章站 2022-06-25 19:17:18
...

1. GET请求

public static void doGet(){
    RestTemplate restTemplate = new RestTemplate();
    //方式一,无参数
    String result1 = restTemplate.getForEntity("http://localhost:8080/hello", String.class).getBody();
    //方式二,1个参数
    String result2 = restTemplate.getForEntity("http://localhost:8080/hello1?name={1}", String.class, "姓名").getBody();
    //方式三,多个参数
    Map<String, String> params = new HashMap<>();
    params.put("name", "姓名");
    params.put("id", "001");
    String result3 = restTemplate.getForEntity("http://localhost:8080/hello1?name={name}&id={id}", String.class, params).getBody();
}

2. POST请求

(1).postForObject直接返回响应体,我们请求时通过泛型约束响应体的类型,但是这个方法无法得到状态头信息。

// restTemplate.postForObject(url,json,String.class)
// postForObject()==postForEntity().getBody()
{“code”:0,“success”:true,“message”:“success”,“data”:“success”}返回结果

(2).postForEntity方法将返回ResponseEntity对象,这个方法的返回值不仅包含状态头信息还包含响应体,例如你想知道自己的请求是返回500还是200,那么请使用postForEntity!且ResponseEntity实现了HttpEntity接口,它提供getBody返回(1)的结果。

// restTemplate.postForEntity(url,json,String.class).toString() 返回结果
<200,{“code”:0,“success”:true,“message”:“success”,“data”:“success”},{Content-Type=[application/json;charset=UTF-8], Transfer-Encoding=[chunked], Date=[Wed, 10 Jul 2019 05:30:11 GMT]}>

2.1 提交json字符串,JSONObject、Map、实体对象提交方式结果一样

public static void dopost(){
    RestTemplate restTemplate = new RestTemplate();
    
    JSONObject json = new JSONObject();
    json.put("status",0);
    json.put("cid","13546121");
    json.put("data","[\"中国银行\",\"农业银行\"]");
    String result1 = restTemplate.postForObject("http://localhost:8080/hello", json, String.class);
    
    RequestDemo demo = new RequestDemo();
    demo.setCid("4564132");
    demo.setStatus(0);
    demo.setData("[\"中国银行\",\"农业银行\"]");
    String result2 = restTemplate.postForObject("http://localhost:8080/hello", demo, String.class);

    Map<String, String> map = new HashMap<>();
    map .put("status",0);
    map .put("cid","13546121");
    map .put("data","[\"中国银行\",\"农业银行\"]");
    String result3 = restTemplate.postForObject("http://localhost:8080/hello", map , String.class);
}

2.2 若要提交对象,则必须使用MultiValueMap类型

public static void dopost(){
    RestTemplate restTemplate = new RestTemplate();
    
    MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
    param .add("status",0);
    param .add("cid","13546121");
    param .add("data","[\"中国银行\",\"农业银行\"]");
    restTemplate.postForEntity("http://localhost:8080/requestByJson", param, String.class).getBody();
}