zoukankan      html  css  js  c++  java
  • 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类型的对象,于是就报错。

  • 相关阅读:
    「两千年中公历转换」数据库介绍
    [转]Web中使用Word控件。(DSOFramer )
    解决DRIVE_IRQL_NOT_LESS_OR_EQUAL的方法
    Html Img的几个属性_存在个问题
    不错的开源C#博客_BlogEngine.net
    [转]引用指定的namespace 解决命名空间冲突的错误
    [原]不太完善的图像合并程序VS2005CSharp_有目录监控_TIF_JPG输出
    [转]JS小游戏_9格的棋
    JS小游戏_能坚持几秒
    [转]前台JS限制上传图片质量大小和尺寸!
  • 原文地址:https://www.cnblogs.com/shen-qian/p/12206102.html
Copyright © 2011-2022 走看看