restTemplate使用

什么是restTemplate

RestTemplate是Spring提供的一个访问Http服务的客户端类。比httpClient好用几百倍。类似于jdbcTemplate。

其中的方法

在这里插入图片描述

使用

创建restTemplate
1.我们可以通过RestTemplateBuilder的build方法创建。
2.直接通过new来创建一个实例。

UriComponentsBuilder类,可以通过它来帮助我们构造URI。

// 将mocha 替换{name}
URI uri = UriComponentsBuilder
				.fromUriString("http://localhost:8080/coffee/?name={name}")
				.build("mocha");
// 将 1 替换{id} 得到http://localhost:8080/coffee/1
URI uri = UriComponentsBuilder
				.fromUriString("http://localhost:8080/coffee/{id}")
				.build(1);

使用restTemplate获取请求结果,既可以获取完整的响应头+响应体,也可以只获取它的响应体。有很多种方法。

// get 请求
// ResponseEntity包含响应头和响应体
ResponseEntity<Coffee> c = restTemplate.getForEntity(uri, Coffee.class);
// 得到响应体 String类型
String s = restTemplate.getForObject(coffeeUri, String.class);

// post请求
// request为响应体 也就是Coffee实体对象
Coffee response = restTemplate.postForObject(coffeeUri, request, Coffee.class);

exchange方法

exchange既可以执行POST方法,还可以执行GET,所以应用最为广泛。

//构造URI ,根据accept类型返回对应的数据。 json/xml
// build 带参数直接返回URI对象
URI uri = UriComponentsBuilder
				.fromUriString("http://localhost:8080/coffee/?name={name}")
				.build("mocha");
		// 接收类型为XML格式
		RequestEntity<Void> req = RequestEntity.get(uri)
				.accept(MediaType.APPLICATION_XML)
				.build();
		ResponseEntity<String> resp = restTemplate.exchange(req, String.class);
		//获取响应状态码
		resp.getStatusCode()//获取响应头信息
		resp.getHeaders().toString();

		//创建订单对象
NewOrderRequest orderRequest = NewOrderRequest.builder()
                .customer("Li Lei")
                .items(Arrays.asList("capuccino"))
                .build();
                //构造post请求体
        RequestEntity<NewOrderRequest> request = RequestEntity
                .post(UriComponentsBuilder.fromUriString("http://localhost:8080/order/").build().toUri())
                .body(orderRequest);
        ResponseEntity<CoffeeOrder> response = restTemplate.exchange(request, CoffeeOrder.class);

返回结果为泛型

当我们的响应体为一个带泛型类型的类,那么我们这样写是错误的。

// 这是错误的!!! 可以试试,他讲我们对象转为了linkedHashMap??
ResponseEntity<List<Coffee>> resprestTemplate.exchange(req, List.class);

为此我们需要使用这个类指定一下ParameterizedTypeReference

ParameterizedTypeReference<List<Coffee>> ptr =
				new ParameterizedTypeReference<List<Coffee>>() {};
				//uri  HTTPMethod requestEntity ParameterizedTypeReference
		ResponseEntity<List<Coffee>> list = restTemplate
				.exchange(coffeeUri, HttpMethod.GET, null, ptr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值