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