这几天在学习SpringCloud,做一个小demo时,需要使用RestTemplate
去远程调用一个微服务提供类的接口。出现了一个问题,这一篇博客来记录一下。
大致是这样的,我在客户端远程调用自己编写的服务端的接口来完成增加记录的操作。远程调用成功是成功了,但是增加的数据没有字段值,就是增加的那一行记录全为null
值!就只有一个自增的id主键
。
找了好久的问题,才想起来使用RestTemplate
时,远程调用服务端的增加方法,所使用的方法:
CommonResult commonResult = restTemplate.postForObject(payment_url + "/payment", payment, CommonResult.class);
代码中的payment
是有值的,但是到服务端就为null了,原来是服务端中参数获取不到:
@PostMapping("/payment")
public CommonResult add(Payment payment){
log.info(payment.toString());
Integer result = paymentService.add(payment);
if (result >= 1)
return new CommonResult(200,"插入成功",result);
else
return new CommonResult(400,"插入失败");
}
需要在payment参数前面加上@RequestBody注解
,否则传递过来的值无法映射到参数中,修改后的代码:
@PostMapping("/payment")
public CommonResult add(@RequestBody Payment payment){
log.info(payment.toString());
Integer result = paymentService.add(payment);
if (result >= 1)
return new CommonResult(200,"插入成功",result);
else
return new CommonResult(400,"插入失败");
}
@RequestBody
是SpringMvc的原生注解,发现到头来很多东西都丢掉了,有空还是需要回去好好看看。这注解的作用大致是将传递过来的json格式串封装到注解所在的参数上,前提是json里面的属性名和参数内的属性名要一致。