RestTemplate中使用ParameterizedTypeReference参数化类型支持泛型,主要是List
来源:互联网 发布:wifi满信号网络特别慢 编辑:程序博客网 时间:2024/06/05 15:30
在使用http请求时,往往会封装一个统一的结果类
当需要使用post请求,返回List<OrderInnDay>时,即可这样使用:
package com.plateno.booking.sync.ebk.process.http.response;public class InternalDataServiceResult <T> {private String resultCode;private String resultMsg;private T data;public String getResultCode() {return resultCode;}public void setResultCode(String resultCode) {this.resultCode = resultCode;}public String getResultMsg() {return resultMsg;}public void setResultMsg(String resultMsg) {this.resultMsg = resultMsg;}public T getData() {return data;}public void setData(T data) {this.data = data;}@Overridepublic String toString() {return "InternalDataServiceResult [resultCode=" + resultCode + ", resultMsg=" + resultMsg + ", data=" + data+ "]";}/** * 是否操作成功 * @return */public boolean isSuccess(){return "0".equals(this.resultCode);}}
data是实际返回的数据(程序需要的),这里是个T泛型,当T是类似List<OrderInnDay>时,使用普通的RestTemplate.postForObject是无法知道OrderInnDay的类型的,最终T会是List<LinkedHashMap>,这不是我们想要的结果,恰好RestTemplate有其它的方法可以代替,比较麻烦(怪spring没有很好的封装上层方法)
package com.plateno.booking.util;import java.util.List;import java.util.Map;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Lazy;import org.springframework.core.ParameterizedTypeReference;import org.springframework.http.HttpEntity;import org.springframework.http.HttpMethod;import org.springframework.stereotype.Component;import org.springframework.web.client.RestTemplate;import com.plateno.booking.bean.InternalDataServiceResult;@Component@Lazy(false)public class RestTemplateUtil {@Autowiredprivate RestTemplate xRestTemplate;private static RestTemplate restTemplate;public static <T> InternalDataServiceResult<List<T>> exchangeAsList(HttpMethod method,String url, Map<String,Object> params, ParameterizedTypeReference<InternalDataServiceResult<List<T>>> responseType) { HttpEntity requestEntity = new HttpEntity(params);return restTemplate.exchange(url, method, requestEntity, responseType).getBody();}public static <T> InternalDataServiceResult<List<T>> postForList(String url, Map<String,Object> params, ParameterizedTypeReference<InternalDataServiceResult<List<T>>> responseType){return exchangeAsList(HttpMethod.POST, url, params, responseType);}@PostConstructpublic void init(){restTemplate = this.xRestTemplate;}public static RestTemplate getRestTemplate() {return restTemplate;}public static void setRestTemplate(RestTemplate restTemplate) {RestTemplateUtil.restTemplate = restTemplate;}public RestTemplate getxRestTemplate() {return xRestTemplate;}public void setxRestTemplate(RestTemplate xRestTemplate) {this.xRestTemplate = xRestTemplate;}}
当需要使用post请求,返回List<OrderInnDay>时,即可这样使用:
public List<OrderInnDay> getOrderInnDayList(String orderCode,Integer memberId){Map<String, Object> params = new HashMap<>();params.put("orderCode", orderCode);params.put("memberId", memberId);String url = apiProperties.getInternalDataService().getGetOrderInnDayList();log.info("query orderInnDayList,url:{},params:{}", url ,JsonUtil.toJson(params)); //use postForListInternalDataServiceResult<List<OrderInnDay>> result = RestTemplateUtil.postForList(url, params, new ParameterizedTypeReference<InternalDataServiceResult<List<OrderInnDay>>>(){});if (!result.isSuccess()) {log.warn("query orderInnDayList failed:url:{},params:{},response:{}", url,JsonUtil.toJson(params), JsonUtil.toJson(result));}return result.getData();}
0 0
- RestTemplate中使用ParameterizedTypeReference参数化类型支持泛型,主要是List
- springboot中使用RestTemplate
- Spring中RestTemplate使用例子
- C#中调用SQL Server存储过程主要是参数使用问题
- RestTemplate 遇到泛型参数时,用exchange方法
- NO.94 RestTemplate.getForObject将PO中List<T>的泛型变成LinkedHashMap问题的解决
- 使用XmlSerializer类将对象序列化为Xml格式保存 - 支持泛型的Dictionary,list 等集合类型
- C++中函数中参数和返回值都是用户定义类型(这里主要是类的情况时的分析)
- RestTemplate使用
- RestTemplate使用
- Oracle存储过程传入类似java中list、数组类型的参数并使用
- 类型 List 不是通用的;不能使用参数 <String> 将它参数化
- spring中 使用restTemplate访问rest接口
- 在spring MVC中使用RestTemplate
- springboot中配置restTemplate及简单使用
- Spring Boot中RestTemplate的使用
- switch() 参数支持类型
- spring restTemplate 返回泛型
- 自定义UINavgationBar的高度
- Rancher 容器实战分享季之杭州站精彩回顾
- 初学python:边学边练,定义函数
- C语言基础进阶之 MessageBox()用法简介
- 优先队列
- RestTemplate中使用ParameterizedTypeReference参数化类型支持泛型,主要是List
- Hadoop实战(五) 高阶MapReduce
- Linux系统用户管理
- IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页
- tomcat里的webapps发布的文件名称和项目名称不一样
- JEPF表单设计
- c# int 和 string相互转换
- 496. Next Greater Element I
- Linux系统基本设置