SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)

作者: hangge 发布时间: 2019-11-26 浏览: 2551 次 编辑

二、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;
    }
}

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)

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;
    }

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)


(2)其中定义的实体 Bean 代码如下:

@Getter
@Setter
@ToString
public class PostBean {
    private int userId;
    private int id;
    private String title;
    private String body;
}

4,将结果转成数组

(1)假设接口返回的是一个 json 数组,内容如下:

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)

(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;
    }
}

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)

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}";
Map map = 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> SpringHTTP 请求响应的封装,包括了几个重要的元素,如响应码、contentTypecontentLength、响应消息体等。
  • 其中响应消息体可以通过 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";
        ResponseEntity 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;
    }
}

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)


(2)其中定义的实体 Bean 代码如下:

@Getter
@Setter
@ToString
public class PostBean {
    private int userId;
    private int id;
    private String title;
    private String body;
}

4,将结果转成数组

(1)假设接口返回的是一个 json 数组,内容如下:

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)

(2)我们也可以将响应体转成对应的 Bean 数组:

@RestController
public class HelloController {
 
    @Autowired
    private RestTemplate restTemplate;
 
    @GetMapping("/test")
    public void test() {
        String url = "http://jsonplaceholder.typicode.com/posts";
        ResponseEntity responseEntity = restTemplate.getForEntity(url, PostBean[].class);
        PostBean[] arr = responseEntity.getBody(); // 获取响应体
        System.out.println("结果数:" + arr.length);
        return;
    }
}

原文:SpringBoot - 网络请求模版类RestTemplate使用详解2(GET请求)

5,参数传递的几种方式

下面 3 种方式的结果都是一样的。

(1)使用占位符的形式传递参数:

String url = "http://jsonplaceholder.typicode.com/{1}/{2}";
ResponseEntity responseEntity = restTemplate.getForEntity(url, PostBean.class, "posts", 1);

(2)另一种使用占位符的形式:

String url = "http://jsonplaceholder.typicode.com/{type}/{id}";
String type = "posts";
int id = 1;
ResponseEntity responseEntity = restTemplate.getForEntity(url, PostBean.class, type, id);

(3)我们也可以使用 map 装载参数:

String url = "http://jsonplaceholder.typicode.com/{type}/{id}";
Map map = new HashMap<>();
map.put("type", "posts");
map.put("id", 1);
ResponseEntity responseEntity = restTemplate.getForEntity(url, PostBean.class, map);