文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于jackson序列化和feign返回值的问题

2024-04-02 19:55

关注

jackson序列化和feign返回值

jackson注意点

被序列化/反序列化的实体

a.必须要有无参构造方法

b.字段要有set/get方法

c.不需要序列化的字段 可以用@jsonIgnore 修饰

feignClient 返回值问题

返回值的类型 不一定 和被调用方返回值类型一样

如:

被调用方是

@ResponseBody
@RequestMapping("test");
public Map test(){
    Map map = new HashMap();
    map.put("name","zhangsan");
    map.put("address","地址");
    return map;
}

调用方:

@FeignClient("xxxx")
public Interface xxService{
    @RequestMapping("/test")
    Test test();
}

@Data
class Test{
    public Test(){}
    private String name;
    private String address;
}

还有个方法就是 调用方直接用string 接收 再自己转换

feign调用异常,反序列化失败

异常消息如下

nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `xxx` out of START_OBJECT token

本来我用fastjson消息转换器替换了原来的消息转换器,我以为是没有替换掉,折腾了一阵

后来去掉fastjson消息转换器还是报错,我想着应该是返回的数据问题

被调用服务控制层返回的数据和我反序列的对象一致,应该是被调用服务对返回的数据统一做了包装,导致的问题,去除包装就好了,或者反序列化的对象为包装后的对象

我是在方法映射上加headers属性,属性值Keep-Original=Keep-Original,去除包装

@GetMapping(value = "xxx",headers = {"Keep-Original=Keep-Original"})

最后问题就完美解决了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯