解决SpringCloud Feign传对象参数调用失败的问题
程序员文章站
2022-03-19 08:22:26
springcloud feign传对象参数调用失败 不支持get请求方式 使用apache httpclient替换feign原生httpclient @requestbody接收...
springcloud feign传对象参数调用失败
- 不支持get请求方式
- 使用apache httpclient替换feign原生httpclient
- @requestbody接收json参数
bootstrap-local.yml
feign: httpclient: enabled: true
pom.xml
<!-- 使用apache httpclient替换feign原生httpclient --> <dependency> <groupid>com.netflix.feign</groupid> <artifactid>feign-httpclient</artifactid> <version>8.18.0</version> </dependency> <dependency> <groupid>org.apache.httpcomponents</groupid> <artifactid>httpclient</artifactid> <version>4.5.3</version> </dependency>
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; } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。