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


Posted in Java/Android onJune 23, 2021

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;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
gateway网关接口请求的校验方式
Jul 15 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
Mybatis是这样防止sql注入的
Dec 06 Java/Android
java objectUtils 使用可能会出现的问题
Feb 28 Java/Android
Java中的继承、多态以及封装
Apr 11 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
利用正则表达式匹配浮点型数据
May 30 Java/Android
Android Gradle 插件自定义Plugin实现注意事项
Jun 16 Java/Android
详解Java实现设计模式之责任链模式
Jun 23 #Java/Android
Spring boot应用启动后首次访问很慢的解决方案
Java并发编程之详解CyclicBarrier线程同步
如何解决springcloud feign 首次调用100%失败的问题
分析设计模式之模板方法Java实现
基于Java的MathML转图片的方法(示例代码)
Jun 23 #Java/Android
springboot如何初始化执行sql语句
You might like
PHP+DBM的同学录程序(2)
2006/10/09 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
php输入流php://input使用浅析
2014/09/02 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
Python开发常用的一些开源Package分享
2015/02/14 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
利用python求积分的实例
2019/07/03 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
ktv好的活动方案
2014/08/15 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技