二、GET 请求1:getForObject() 方法的使用
1,方法介绍
getForObject() 用于发送一个 HTTP GET 请求。它和 getForEntity() 用法几乎相同。区别在于 getForObject() 返回值返回的是响应体,省略了很多 response 的信息。
2,获取 String 结果数据
下面代码将响应结果映射为一个 String 字符串,并打印出来。
1 2 3 4 5 6 7 8 9 10 11 12 | @RestController public class HelloController { @Autowired private RestTemplate restTemplate; @GetMapping ( "/test" ) public void test() { String str = restTemplate.getForObject(url, String. class ); System.out.println(str); return ; } } |
3,将结果转换为对象
(1)由于 getForObject() 包含了将 HTTP 结果转成 POJO 的功能,所以我们可以将其转换成自定义的实体类对象。
1 2 3 4 5 6 7 8 9 10 11 | @RestController public class HelloController { @Autowired private RestTemplate restTemplate; @GetMapping ( "/test" ) public void test() { PostBean postBean = restTemplate.getForObject(url, PostBean. class ); System.out.println(postBean.toString()); return ; } |
(2)其中定义的实体 Bean 代码如下:
1 2 3 4 5 6 7 8 9 | @Getter @Setter @ToString public class PostBean { private int userId; private int id; private String title; private String body; } |
4,将结果转成数组
(1)假设接口返回的是一个 json 数组,内容如下:
(2)我们也可以将其转成对应的 Bean 数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @RestController public class HelloController { @Autowired private RestTemplate restTemplate; @GetMapping ( "/test" ) public void test() { PostBean[] arr = restTemplate.getForObject(url, PostBean[]. class ); System.out.println( "结果数:" + arr.length); return ; } } |
5,参数传递的几种方式
下面 3 种方式的结果都是一样的。
(1)使用占位符的形式传递参数:
1 2 | PostBean postBean = restTemplate.getForObject(url, PostBean. class , "posts" , 1 ); |
(2)另一种使用占位符的形式:
1 2 3 4 | String type = "posts" ; int id = 1 ; PostBean postBean = restTemplate.getForObject(url, PostBean. class , type, id); |
(3)我们也可以使用 map 装载参数:
1 2 3 4 5 | Map<string,object> map = new HashMap<>(); map.put( "type" , "posts" ); map.put( "id" , 1 ); PostBean postBean = restTemplate.getForObject(url, PostBean. class , map);</string,object> |
三、GET 请求2:getForEntity() 方法的使用
1,方法介绍
getForEntity() 同样用于发送一个 HTTP GET 请求。它和上面介绍的 getForObject() 用法几乎相同。区别在于 getForEntity() 返回的是 ResponseEntity<T>:
- ResponseEntity<T> 是 Spring 对 HTTP 请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。
- 其中响应消息体可以通过 ResponseEntity 对象的 getBody() 来获取。
2,基本用法
下面代码请求一个网络接口,并将响应体、响应头、响应码打印出来。其中响应体的类型设置为 String。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @RestController public class HelloController { @Autowired private RestTemplate restTemplate; @GetMapping ( "/test" ) public void test() { ResponseEntity<string> responseEntity = restTemplate.getForEntity(url, String. class ); String body = responseEntity.getBody(); // 获取响应体 HttpStatus statusCode = responseEntity.getStatusCode(); // 获取响应码 int statusCodeValue = responseEntity.getStatusCodeValue(); // 获取响应码值 HttpHeaders headers = responseEntity.getHeaders(); // 获取响应头 System.out.println( "body:" + body); System.out.println( "statusCode:" + statusCode); System.out.println( "statusCodeValue:" + statusCodeValue); System.out.println( "headers:" + headers); return ; } } </string> |
(2)其中定义的实体 Bean 代码如下:
1 2 3 4 5 6 7 8 9 | @Getter @Setter @ToString public class PostBean { private int userId; private int id; private String title; private String body; } |
4,将结果转成数组
(1)假设接口返回的是一个 json 数组,内容如下:
(2)我们也可以将响应体转成对应的 Bean 数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @RestController public class HelloController { @Autowired private RestTemplate restTemplate; @GetMapping ( "/test" ) public void test() { ResponseEntity<postbean[]> responseEntity = restTemplate.getForEntity(url, PostBean[]. class ); PostBean[] arr = responseEntity.getBody(); // 获取响应体 System.out.println( "结果数:" + arr.length); return ; } }</postbean[]> |
5,参数传递的几种方式
下面 3 种方式的结果都是一样的。
(1)使用占位符的形式传递参数:
1 2 | ResponseEntity<postbean> responseEntity = restTemplate.getForEntity(url, PostBean. class , "posts" , 1 );</postbean> |
(2)另一种使用占位符的形式:
1 2 3 4 | String type = "posts" ; int id = 1 ; ResponseEntity<postbean> responseEntity = restTemplate.getForEntity(url, PostBean. class , type, id);</postbean> |
(3)我们也可以使用 map 装载参数:
1 2 3 4 5 | Map<string,object> map = new HashMap<>(); map.put( "type" , "posts" ); map.put( "id" , 1 ); ResponseEntity<postbean> responseEntity = restTemplate.getForEntity(url, PostBean. class , map);</postbean></string,object> |