基于FeignException$InternalServerError的解决方案
原因:
feign传值出错无法接收到传值
由于是POST所以添加@RequestBody进行尝试
解决:
错误原因是未添加@RequestBody
尝试不通过json直接在body中传字符串看看能不能直接通过@RequestBody接收
Feign调用时失败,feign.FeignException:status 500 readingXXX。LocalDate序列化引起的错误
最近在项目中需要用feign做一个服务端调用,调用别的服务的接口将我的一些信息发给它,但是总是
报错:feign.FeignException:status 500 readingXXX。
我的调用代码如下:
@PostMapping(value = "/xx/xxx") public ResultData<String> saveProjectInfo(ProjectInfo p);
按理说应该是没问题的,对方也返回了code为500的响应,说明请求确实送达了对方接口,但是没有正常处理。
于是怀疑是参数没有传对,然后就打断点调试,把发送请求前的参数信息“p”复制出来,打开对方项目的swagger文档,发送复制来的参数,发现能正常调通。
这就奇怪了,同样的参数在我这里通过feign调用就不行,在swagger上直接调用就可以。于是开始到处找原因,最后在别人的建议下用抓包工具抓从我调用方法这里发出的请求包,看看从我这里发出的包是否任然与swagger上输的参数一样。
果然发现了问题,因为对方的ProjectInfo类的crateTime属性是LocalDate类型的,为了类型一致我这里建实体类时也把createTime属性设为LocalDate类型的。
在swagger上测试直接输字符串就行,对方的接口在接收参数时直接就将其转为LocalDate了:
{ ....... "createTime" : "2020-01-09" ......... }
但是我的请求发出后,抓的包显示createTime变成了这样:
这就导致与对方的接收参数不一致,自然就直接报错了。最后直接把我的ProjectInfo实体类的createTime属性设为String类型即可,也可以引入jar包后使用一些注解在发送时将这个属性序列化成指定的格式如”yyyy-MM-dd“
总之就是对于LocalDate这个类,默认转化为json时将它看成了一个普通的JavaObject(我预期转化成yyyy-MM-dd),然后发送到网络上。而在对方接收时却不能根据那种格式json正确的转换成LocalDate类型的对象,于是就报错。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
- Java ClassCastException异常解决方案
- java.lang.NumberFormatException异常解决方案详解
- java.lang.NullPointerException异常问题解决方案
- Spring Cloud Gateway自定义异常处理Exception Handler的方法小结
- Java中Exception和Error的区别详解
- Java异常 Factory method''sqlSessionFactory''rew exception;ested exception is java.lang.NoSuchMethodError:
- 解析PHP中Exception异常机制
- Java e.printStackTrace()案例讲解
相关文章
SpringBoot使用swagger生成api接口文档的方法详解
在之前的文章中,使用mybatis-plus生成了对应的包,在此基础上,我们针对项目的api接口,添加swagger配置和注解,生成swagger接口文档,需要的可以了解一下2022-10-10springboot项目打包并部署到Tomcat上及报错处理方案
这篇文章主要介绍了springboot项目打包并部署到Tomcat上及报错处理方案,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧2024-08-08Springboot整合Swagger2后访问swagger-ui.html 404报错问题解决方案
这篇文章主要介绍了Springboot整合Swagger2后访问swagger-ui.html 404报错,本文给大家分享两种解决方案,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下2023-06-06
最新评论