- 假如返回的对象是一个范型,应该怎么处理呢?
ResponseBean responseBean = httpTemplate.postByJson(url, createHeader("testPostByJson"), request, ResponseBean.class);但是,假如返回的对象是ResponseBean<xxx>这样的,通过上面的方式来操作会直接报错!当遇到返回的对象是范型类型的时候,我们可以这样操作!
【手撸了一个网络请求工具类,开发速度迅速提升了300%】以下面这个/testPostByJsonObj接口为例!
/** * 模拟JSON请求,post方法测试 * @param request * @return */@RequestMapping(value = https://www.isolves.com/it/cxkf/bk/2022-05-11/"testPostByJsonObj", method = RequestMethod.POST)public ResponseBeanObj testPostByJsonObj(@RequestBody RequestBean requestBean,HttpServletRequest request){HttpServletRequestLog.systemLog(request);//范型测试ResponseBean responseBean = new ResponseBean();responseBean.setCode("200000");responseBean.setMsg("responseBean");//范型测试ResponseBeanObj result = new ResponseBeanObj<>();result.setCode("200");result.setMsg("请求成功,方法:testPostByJsonObj,请求参数:" + JSON.toJSONString(requestBean));result.setObj(responseBean);System.out.println(JSON.toJSONString(result));return result;} 使用RestTemplate工具发起网络请求,代码如下!//将返回的范型对象包装到ParameterizedTypeReference对象里面ParameterizedTypeReference<ResponseBeanObj<ResponseBean>> typeRef = new ParameterizedTypeReference<ResponseBeanObj<ResponseBean>>() {};//使用restTemplate发起网络请求ResponseBeanObj<ResponseBean> responseBean = restTemplate.exchange(url, HttpMethod.POST, request, typeRef);采用restTemplate.exchange()方法,即可实现返回对象范型类型的反序列化!如果使用上面封装的HttpTemplate工具进行操作,也更简单,代码如下:
/** * 模拟JSON提交,post请求,范型返回对象测试 */@Testpublic void testPostByJsonObj(){//请求地址String url = "http://localhost:8080/testPostByJsonObj";//入参RequestBean request = new RequestBean();request.setUserName("唐三藏");request.setUserPwd("123456789");//发送post请求ParameterizedTypeReference<ResponseBeanObj<ResponseBean>> typeRef = new ParameterizedTypeReference<ResponseBeanObj<ResponseBean>>() {};//范型测试ResponseBeanObj<ResponseBean> responseBean = httpTemplate.postByJson(url, createHeader("testPostByJsonObj"), request, typeRef);System.out.println(JSON.toJSONString(responseBean));}三、自定义拦截器在某些场景下,当你使用restTemplate发起网络请求时,所有的请求头部需要带上统一的参数,例如Authorization鉴权码,这个时候改怎么办呢?可能有的同学,想到的就是在传参数的时候,带上请求头部参数!这种方法也可以解决问题!
有没有好的办法统一入口加入呢?
答案肯定是有的,我们可以利用RestTemplate提供的拦截器链来解决这个问题 。
例如在RestTemplate初始化之后,添加一个拦截器,然后在拦截器的请求头部统一注入鉴权码,就可以轻松实现全局加入某个参数,方式如下!
/** * 初始化RestTemplate * @return */@Beanpublic RestTemplate restTemplate(){RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());// 添加一个拦截器,在请求头部添加 Authorization 鉴权码restTemplate.getInterceptors().add((request, body, execution) -> {request.getHeaders().add("Authorization", "xxxxxXXXXX");return execution.execute(request, body);});return restTemplate;}四、小结通过本章的讲解,想必读者初步的了解了如何基于RestTemplate做第二次封装,以便于更佳适配当前团队开发人员的习惯 。RestTemplate的功能其实非常强大,作者也仅仅学了点皮毛,在后续如果有新的功能,也会分享给大家,希望对网友们有所帮助!
推荐阅读
- 别再自己瞎写工具类了,SpringBoot 内置工具类应有尽有,建议收藏
- 黑客大神用什么杀毒?Windows自带的就够,只是加了亿点微小强化
- 年底十三薪是不是就没有年终奖了?速看!不止年终奖、十三薪,年底还有这几笔钱能领
- 开空调制热一个月电费多少-空调制冷一个月多少电费-_3
- 小学成绩不好为什么到初中就变好了?小学成绩很好,到了初中为什么就不好了呢-
- 太史慈什么时候投靠了孙策-?东吴名将太史慈在投靠孙策前,是何人的部下-
- 古代太监太可怜了?古代宫女嫁给太监是怎么过日子的
- 咸丰完了是谁继位的?咸丰在位几年
- 红茶放久了好苦,红茶可以四季喝吗
- 罐装密封红茶保质期,红茶茶袋保质期多久
