Spring Boot 2关于http接口调用(3)

使用RestTemplate

RestTemplate是从Spring 3 就有的功能,这里主要简单介绍几个常用接口的使用

RestOperations中常用的接口

public class RestTemplate extends InterceptingHttpAccessor implements RestOperations

RestTemplate实现了RestOperations接口,里面定义常用的各种方法

// GET请求返回实际对象
<T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException;
// GET请求返回ResponseEntity,包含状态码实际对象
<T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException;

// POST请求返回实际对象
<T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException;
// POST请求返回ResponseEntity,包含状态码实际对象
<T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException;

// 自定义请求方法与泛型返回类型
<T> ResponseEntity<T> exchange(URI url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException;
// 自定义请求方法与泛型返回类型
<T> ResponseEntity<T> exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Map<String, ?> uriVariables) throws RestClientException;

单元测试

@Test
public void test1() {
        long begin = System.currentTimeMillis();

        Map<String, Object> paraMap = new HashMap<String, Object>();
        paraMap.put("msg", "这是一条测试数据");
		// GET返回ResponseEntity
        ResponseEntity<String> responseEntity = new RestTemplate().getForEntity("http://localhost:9999/demo/hello?msg={msg}", String.class, paraMap);
        System.out.println(responseEntity.getStatusCode());
        System.out.println(responseEntity.getBody());

		// GET返回实际类型
        String rtn = new RestTemplate().getForObject("http://localhost:9999/demo/hello?msg={msg}", String.class, paraMap);
        System.out.println(rtn);

		// POST返回ResponseEntity
        responseEntity = new RestTemplate().postForEntity("http://localhost:9999/demo/hello", paraMap, String.class);
        System.out.println(responseEntity.getStatusCode());
        System.out.println(responseEntity.getBody());
		
		// POST返回实际类型
        rtn = new RestTemplate().postForObject("http://localhost:9999/demo/hello", paraMap, String.class);
        System.out.println(rtn);

        long end = System.currentTimeMillis();
        System.out.println("*****消耗时间(秒):" + (end - begin) / 1000.0);
}

@Test
public void test2() {
        long begin = System.currentTimeMillis();
		// 构造复杂的返回类型HttpRspDTO<String>
        ParameterizedTypeReference<HttpRspDTO<String>> parameterizedTypeReference = new ParameterizedTypeReference<HttpRspDTO<String>>() {
            @Override
            public Type getType() {
                return ParameterizedTypeImpl.make(HttpRspDTO.class, new Type[]{String.class}, null);
            }
        };

		// 不带参数的GET请求
        ResponseEntity<HttpRspDTO<String>> responseEntity = new RestTemplate().exchange(URI.create("http://localhost:9999/demo/hello"), HttpMethod.GET, null, parameterizedTypeReference);

        System.out.println(responseEntity.getStatusCode());
        System.out.println(responseEntity.getBody());

		// 带参数的GET请求
        Map<String, Object> paraMap = new HashMap<String, Object>();
        paraMap.put("msg", "这是一条测试数据");
        responseEntity = new RestTemplate().exchange("http://localhost:9999/demo/hello?msg={msg}", HttpMethod.GET, null, parameterizedTypeReference, paraMap);

        System.out.println(responseEntity.getStatusCode());
        System.out.println(responseEntity.getBody());

        long end = System.currentTimeMillis();
        System.out.println("*****消耗时间(秒):" + (end - begin) / 1000.0);
}

源码位置

https://gitee.com/ceclar123/spring-boot-demo/tree/master/ch01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值