首页 > 其他分享 >使用RestTemplate 接收请求返回值中的泛型

使用RestTemplate 接收请求返回值中的泛型

时间:2023-08-19 20:02:17浏览次数:52  
标签:httpEntity RestTemplate private headers new 泛型 返回值

现有一个请求返回值的格式为:

{
	"success": true,
	"message": "",
	"code": 200,
	"result": {
		"returnCode": "03AD",
		"returnMsg": "AD3",
		"qrcode": "https://xxxxxxxxxx3xxxxxaaAAAAAA",
		"outTradeNo": "xxxxxx",
		"bankTradeNo": null,
		"msgId": "xxxx"
	},
	"timestamp": 16889873123011919
}

为了接收这个返回值,消费者这边建立了一个实体类接收这个返回值(考虑到返回值中的result内容会随着接口的改变而改变,使用了泛型):

@Data
public class Result<T> implements Serializable {

	private static final long serialVersionUID = 1L;

	private boolean success;

	private String message;

	private Integer code;
	
	private T result;

	private long timestamp;
}

使用RestTemplate.postForEntity()向生产者发送请求:

HttpHeaders headers = new HttpHeaders();
headers.put("TOKEN_SCRIPT",Arrays.asList(appToken));
OrderDTO orderDTO = txnReqBody.getOtherData();
HttpEntity<OrderDTO> httpEntity = new HttpEntity<>(orderDTO,headers);
ResponseEntity<Result> resultResponseEntity = restTemplateHttps.postForEntity(payQrCodeUrl, httpEntity, Result<PayOrderQueryResponse>.class); --会出现编译错误,不支持泛型

不使用泛型:
ResponseEntity<Result> resultResponseEntity = restTemplateHttps.postForEntity(payQrCodeUrl, httpEntity, Result.class);


发现result对象被解析成了LinkedHashMap

使用exchange加泛型解决问题

HttpHeaders headers = new HttpHeaders();
headers.put("TOKEN_SCRIPT",Arrays.asList(appToken));
OrderDTO orderDTO = txnReqBody.getOtherData();
HttpEntity<OrderDTO> httpEntity = new HttpEntity<>(orderDTO,headers);
ParameterizedTypeReference<Result<PayQrCodeResponse>> typeRef = new ParameterizedTypeReference<Result<PayQrCodeResponse>>() {};
ResponseEntity<Result<PayQrCodeResponse>> exchange = restTemplateHttps.exchange(payQrCodeUrl, HttpMethod.POST, httpEntity, typeRef);


解析正确。

标签:httpEntity,RestTemplate,private,headers,new,泛型,返回值
From: https://www.cnblogs.com/yuyiming/p/17542116.html

相关文章

  • c#泛型
    泛型是什么我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。使用......
  • delphi泛型实现的变体记录
    delphi泛型实现的变体记录typeTRes=record//公共的JSON回复status:Integer;message:string;exception:string;end;TData<T:record>=recorddata:arrayofT;end;TDatas<T:record>=recordres:TRes;......
  • 泛型
    1.表示类publicclassDemo1<T>{privateTvalue;//泛型方法public<T>voidfun(Tx){System.out.println();}}2.表示接口publicinterfaceDemo2<T>{publicTfun();}3.泛型通配符publicstaticvoidmain(String[]args)......
  • spring之RestTemplate使用
    1、带有头部信息的get请求//api访问链接Stringhost=aliWuliuConfig.getHost();//API访问后缀Stringpath=aliWuliuConfig.getPath()+"?type={type}&no={no}";Stringurl=host+path;//替换成自己的阿里云appcodeStringappcode=aliWuliuConfig.getAppcode();//......
  • Feign接口返回值加多层泛型,但没有反序列化彻底
    1、问题描述接口返回值加多层泛型,但没有反序列化彻底2、问题原因jackson-databindjar包版本的问题我们之前用的是2.11.2,这个版本有bug,版本变成2.11.3就好了......
  • 参数类型泛型传入和泛型传出
    public<U,S>R<U>query(Sreq,Stringname,Class<U>type){R<String>resp=httpPost(name,JSONObject.toJSONString(req));if(!resp.isSuccess()){R.fail("网络问题");}Uresult......
  • SpringBoot项目统一处理返回值和异常
    目录简介前期准备统一封装报文统一异常处理自定义异常信息简介当使用SpringBoot开发Web项目的API时,为了与前端更好地通信,通常会约定好接口的响应格式。例如,以下是一个JSON格式的响应,通过返回码和返回信息告知前端具体的操作结果或错误信息。如果操作成功,前端可以通过"data"字段......
  • java反射和泛型测试
     java反射和泛型测试packagecom.qsds.test;importjava.lang.reflect.Method;importcom.qr.util.GetFieldOrder;/***Helloworld!**/publicclassApp<T>{publicstaticvoidmain(String[]args)throwsException{//反射测试tes......
  • JavaSE--泛型
    一、泛型1、泛型语法机制  泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的。(运行阶段泛型没用!)2、泛型的好处  第一:集合中存储的元素类型统一了。  第二:从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”3、泛型的缺点  导致集合中......
  • 泛型
    1、自定义泛型的两种方式:①、使用类名后面定义的泛型(所有方法都能用)格式:直接在类名后面加上<类型>②、在方法申明上定义自己的泛型(只有当前方法能用)格式:修饰符<类型>(这个必须写在修饰符后面,如果有多个修饰符,则放在最后一个的后面)返回值类型方法名(类型变量名){}2、泛型的继......