解决SpringCloud Feign传对象参数调用失败的问题

这篇文章主要介绍了解决SpringCloud Feign传对象参数调用失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringCloud Feign传对象参数调用失败

  • 不支持GET请求方式
  • 使用Apache HttpClient替换Feign原生httpclient
  • @RequestBody接收json参数

bootstrap-local.yml

 feign: httpclient: enabled: true

pom.xml

  com.netflix.feignfeign-httpclient8.18.0 org.apache.httpcomponentshttpclient4.5.3

feignClient:

 @FeignClient(name = "hd-ucenter-server", fallback = SysTestServerFallbackImpl.class) public interface SysTestServer { @RequestMapping(value = "/test/test", method = RequestMethod.POST, consumes = "application/json") Object test(CurrentUser currentUser); }

RestController:

 @RestController @PostMapping("/test") public class TestController { @RequestMapping(value = "/test") public Object test(@RequestBody CurrentUser currentUser) { System.out.printf("调用test\n"); return currentUser; } }

SpringCloud中Feign异常无法传递的问题

因为 cloud内部抛出异常不进行处理,Feign获取spring默认包装异常结果如下:

{
"timestamp": "2017-12-27 15:01:53",
"status": 500,
"error": "Internal Server Error",
"exception": "com.keruyun.loyalty.commons.master.exception.BusinessException",
"message": "Request processing failed; nested exception is {\"code\":1000, \"message\":\"test Exception\"}",
"path": "/coupon/cloud/commercial/8469"
}

自定义的异常处理下返回状态

 @Slf4j @RestControllerAdvice public class GlobalExceptionHandlerResolver { //内部服务异常处理 @ExceptionHandler(InternalApiException.class) public ResultResp handleGlobalException(HttpServletResponse response, InternalApiException internalApiException) { ResultResp resultResp = internalApiException.getResultResp(); log.error(internalApiException.getMessage(), internalApiException); response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());//返回500异常 response.setContentType(MediaType.APPLICATION_JSON_UTF8.toString()); return resultResp; } }

以上就是解决SpringCloud Feign传对象参数调用失败的问题的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java