Sprint Boot:RestTemplate使用及踩坑

背景

最近项目中需要使用http请求对方数据,一开始考虑使用HttpClient来完成,其基本的流程如下:

  1. 创建一个http请求。
  2. 设置请求参数。
  3. 获取返回结果。

虽然说就这么简单的3步,但其中很多都是模版代码,还要写各种异常处理,实际上还是比较麻烦的。
由于项目中的http请求相对简单,处理过程中不需要关心太多细节,网上搜了一番后,决定采用Spring自带的RestTemplate。

RestTemplate的使用

RestTemplate中,基本的关于http请求的接口主要有下面几个:

// get 请求
public <T> T getForObject();
public <T> ResponseEntity<T> getForEntity();

// post 请求
public <T> T postForObject();
public <T> ResponseEntity<T> postForEntity();

// put 请求
public void put();

// delete
public void delete()

// exchange
public <T> ResponseEntity<T> exchange()

exchange请求可以处理上面各种请求,可以说是一个综合的接口。

在我的项目中,主要就关心get和post接口。可以看到接口主要分两种xxxForObjcetxxxForEntity,前者直接返回自定义的结果对象,只关注返回结果中的主要内容;后者返回一个ResponseEntity对象,除了返回内容外,还包含状态码、请求头等信息。

简单对象映射

RestTemplate会自动构建结果对象,并将请求结果数据填入对象中。例如:

exchange(url, HttpMethod.GET, null, result.class);

上面这行代码,用于处理返回类型为简单类型的请求(这里说的简单是指没有范型,类型嵌套等,可能有误,我没有详细测试过)。

复杂对象映射

对于复杂对象,就需要使用一个名叫ParameterizedTypeReference<T>的类,T就是你的结果对象,Spring会去解析其中的对象类型。
假设你有个范型返回类Response<T>

public class Response<T> {
   
	private Integer code;
	private String message;
	private T data;

假设TMap<String, String>类型,为了正确映射结果,使用方式如下:

exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<Response<Map<String, String>>() {
   });

RestTemplate踩坑

RestTemplate自动构建结果对象,但是能否正确地将结果值填入相应的变量中,取决于你是否正确设置了用于结果消息转换的转换器。Spring中有个各种消息转换器,他们的公共接口为HttpMessageConverter。由于在我的项目中,返回的结果为json数据,因此我要设置一个用于将json字符串映射成java对象的转换器。

在设置转换器之前,首先看一下RestTemplate的无参构造函数:

public 
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值