restTemplate是调用restful接口时比较便捷的一种方式,他的方法有很多,getForObject,postForObject,exchange等等,我这里就不赘述了。但是在进行传参的时候,如若传递的参数为自定义的类型,那该如何传递。在这里简单记录下。
首先如果需要传递自定义类型的话,请求方式一定是post类型(get类型应该传递不了,我觉得传递不了,如果大家能传递的话,麻烦私信我让我学习下= =)。我查找了下网上资料,发现没有我想要的,于是我就自己看了下方法,发现可以直接用下面的方式来进行传值:
调用端:
VerifyParam verifyParam=new VerifyParam();
SystemParams systemParams=new SystemParams();
systemParams.setVersion("v9.0");
TokenInfo tokenInfo=new TokenInfo();
tokenInfo.setCustomerId(1234L);
HttpRequest request=null;
verifyParam.setSystemParams(systemParams);
verifyParam.setRequest(request);
verifyParam.setTokenInfo(tokenInfo);
HttpEntity httpEntity=new HttpEntity(verifyParam,null);
ResponseEntity<VerifyApiRes> response3 = restTemplate.exchange(url, HttpMethod.POST, httpEntity, VerifyApiRes.class);
服务端:
@RequestMapping(value = "/test_api",method = RequestMethod.POST)
public BaseRes verifyApi(@RequestBody VerifyParam verifyParam) {
// System.out.println(request.getAllHeaders());
System.out.println("进入方法");
SystemParams systemParams=new SystemParams();
systemParams=verifyParam.getSystemParams();
System.out.println(systemParams.getVersion());
HttpRequest request=verifyParam.getRequest();
System.out.println(request);
TokenInfo tokenInfo=verifyParam.getTokenInfo();
System.out.println(systemParams);
System.out.println(tokenInfo);
return new VerifyApiRes(0,systemParams,tokenInfo);
// return new ErrorRes(1,001,"test_error");
}
代码其实很简单,我想传递SystemParams ,TokenInfo 等多个自定义对象,post方法需要用@RequestBody来接收请求体,所以我就新建了类,把需要传递的对象放在里面。然后通过HttpEntity的构造方法,直接将需要传递的对象传入即可(这里接收类型是个object,理论上所有的类型都能接收,我试过map,其他的没试过,有需要可以自己试试)HttpEntity httpEntity=new HttpEntity(verifyParam,null);
通过这方式,就可以将自定义的对象传到服务端了。
接收服务端的返回值就更简单了,跟普通的返回接收没什么区别。
VerifyApiRes ver=response3.getBody();
SystemParams s1=ver.getSystemParams();
System.out.println("result3====================" + ver.getResultCode());
在使用exchange方法获取到ResponseEntity对象后,可以直接getBody来获取。这里可用的方法有很多,有需要可以自己尝试下。我这里就简单记录一下。