SpringCloud微服务的调用问题
SpringCloud的大坑记录现场
首先, 我创建了两个微服务模块,一个生成者,一个消费者,当使用消费者去调用生产者使用restTemplate.postForObject方法,报错。
问题描述
异常信息
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: 添加的对象为空,参数异常!] with root cause
从消费者调用生产者时,①传递到生产者的时候参数为null②数据源异常
例如:数据传输过程中数据出现丢失的情况,数据为null
@RequestMapping("/comsumer/addPayment")
public R add(Payment payment) {
System.out.println("消费者访问生产者成功!!---添加中。。。。。。。。");
System.out.println(payment);
try {
return restTemplate.postForObject(PAYMENT_URL + "/addPayment", payment, R.class);
} catch (Exception e) {
throw new RuntimeException("微服务调用接口失败!" + e.getMessage());
}
}
原因分析:
①消费者是不需要配置数据源的,因为他调用其他微服务提供的接口,不配置数据源就会使用默认数据源,注释掉数据源或者改成德鲁伊数据源
②当消费者微服务调用生产者的微服务时,缺少了一个注解@RequestBody
解决方案:
①注释掉数据源
②在调用生产者的接口参数前加注解@RequestBody
@PostMapping("/addPayment")
public R addPayment(@RequestBody Payment payment) {
log.info("添加的对象:"+payment);
boolean save = false;
try {
save = paymentService.save(payment);
} catch (Exception e) {
throw new RuntimeException("添加的对象为空,参数异常!");
}
if (save) {
log.info("添加成功!!");
return R.ok();
} else {
log.info("添加失败!!");
return R.error();
}
}