关于jackson序列化和feign返回值的问题
目录
- jackson序列化和feign返回值
- jackson注意点
- feignClient返回值问题
- feign调用异常,反序列化失败
- 异常消息如下
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(); } /** * 实体类对应的属性 和 map中对应 就行了 */ @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"})
最后问题就完美解决了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
jackson序列化和反序列化的应用实践指南
源码地址:https://github.com/zhouweixin/serializable 1 相关概念 序列化: 把对象转换为字节序列的过程称为对象的序列化 反序列化: 把字节序列恢复为对象的过程称为对象的反序列化 2 序列化的作用 用于把内存中的对象状态保存到一个文件中或者数据库中 用于网络传送对象 用于远程调用传输对象 3 准备序列化对象 准备了两个类, 教师类和学生类, 其中一个学生只有一个教师 这里省略了构造方法和setter, getter方法 Teacher.java publ
-
Jackson序列化和反序列化忽略字段操作
一.设置Jackson序列化时只包含不为空的字段 new ObjectMapper().setSerializationInclusion(Include.NON_NULL); 二.设置在反序列化时忽略在JSON字符串中存在,而在Java中不存在的属性 new ObjectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 三.Jackson序列化时忽略字段的方式 1.方式一:FilterProvider a)在需
-
解决Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题
LocalDate . LocalTime . LocalDateTime 是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作.然而,我们在使用Spring Boot或使用Spring Cloud Feign的时候,往往会发现使用请求参数或返回结果中有 LocalDate . LocalTime . LocalDateTime 的时候会发生各种问题.本文我们就来说说这种情况下出现的问题,以及如何解决. 问题现象 先来看看症状.比如下面的例子: @Sprin
-
使用Jackson反序列化遇到的问题及解决
Jackson反序列化遇到的问题 最近在项目中需要使用Jackson把前台转来的字符转为对象,转换过程中发生了错误,报错如下 com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String value '2018-09-14 15:12:08': not a valid representation (error: Failed
-
关于jackson序列化和feign返回值的问题
目录 jackson序列化和feign返回值 jackson注意点 feignClient返回值问题 feign调用异常,反序列化失败 异常消息如下 jackson序列化和feign返回值 jackson注意点 被序列化/反序列化的实体 a.必须要有无参构造方法 b.字段要有set/get方法 c.不需要序列化的字段 可以用@jsonIgnore 修饰 feignClient 返回值问题 返回值的类型 不一定 和被调用方返回值类型一样 如: 被调用方是 @ResponseBody @Reques
-
Feign接口方法返回值设置方式
一.介绍 随着微服务的广泛应用,越来越多的企业都会使用微服务进行项目开发,在各个服务之间需要通过feign来进行通信,所以在feign调用接口中方法会接受其他服务接口不同类型返回值. 二.返回值设置 1.依据被调用服务接口设置相同返回类型 介绍:微服务A接口getUser 返回List<User>类型,微服务B通过feign调用方法也返回相同的结果类型. 特点:返回类型一一对应,在调用时不需要进行转化直接拿来就可以用. 缺点:扩展性不好,维护性不加. 解释:在目前springboot开发中,接
-
spring boot 下对JSON返回值去除null和空字段操作
在开发过程中,我们需要统一返回前端json格式的数据,但有些接口的返回值存在 null或者""这种没有意义的字段. 不仅影响理解,还浪费带宽,这时我们可以统一做一下处理,不返回空字段,或者把NULL转成"",spring 内置的json处理框架是Jackson.我们可以对它配置一下达到目的 直接看代码,很简单. /** * 〈返回json空值去掉null和""〉 〈功能详细描述〉 * * @author gogym * @version 2017
-
SpringBoot ResponseBody返回值处理的实现
1. SpringBoot ResponseBody 返回值中null值处理 @PostMapping(path = "/test", produces = MediaType.APPLICATION_JSON_VALUE) public Object test() { JSONObject jsonObject = new JSONObject(); jsonObject.put("test","test"); jsonObject.put(&
-
Jackson序列化丢失泛型的解决
Jackson序列化丢失泛型 经过 项目中遇到一个奇怪的bug,即一个Map<Integer,List<Integer>>的泛型map,向map中get一个存在的key,事实上却返回null. 经过排查,发现是该map被Jackson序列化后,key的类型从Integer变成了String类型.再经过反序列化,即使已经声明key泛型的Integer,反序列化后内存数据中的key为String并不是Integer类型且并未抛出异常. 复现 1.声明一个key泛型为Integer的ma
-
如何自定义Jackson序列化 @JsonSerialize
目录 自定义Jackson序列化 @JsonSerialize jackson自定义全局序列化.反序列化 创建序列化类 创建反序列化类 将两个类注册进入jackson核心对象objectMapper 小结一下 自定义Jackson序列化 @JsonSerialize 自定义json序列化需要实现StdSerializer<T>或者JsonSerializer<T>. 我要序列化House这个类,加上注解,指定用于序列化的类 package com.xhx.json.entity;
-
SpringMVC Controller 返回值的可选类型详解
spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMapping("/hello") public ModelAndView helloWorld() { String message = "Hello World, Spring 3.x!"; return new ModelAndView("hello"
-
SpringMVC 方法四种类型返回值总结(你用过几种)
SpringMVC 现在算是 Java 领域的一个基础性框架了,很多人天天用,可是对于 SpringMVC 方法的返回值,你又是否完全清楚呢?今天松哥就来和大家聊一聊 SpringMVC 中四种不同类型的返回值,看看有没有 get 到你的知识盲点? 1. ModelAndView 以前前后端不分的情况下,ModelAndView 应该是最最常见的返回值类型了,现在前后端分离后,后端都是以返回 JSON 数据为主了.后端返回 ModelAndView 这个比较容易理解,开发者可以在 ModelAn
-
Spring MVC Controller返回值及异常的统一处理方法
旧的设计方案 开发api的时候,需要先定义好接口的数据响应结果.如下是一个很简单直接的Controller实现方法及响应结果定义. @RestController @RequestMapping("/users") public class UserController { @Inject private UserService userService; @GetRequest("/{userId:\\d+}") public ResponseBean signin
随机推荐
- ASP.NET中母版页和shtml实例入门
- Objective-C中编程中一些推荐的书写规范小结
- oracle应用程序实现打包 的方法
- python获取一组数据里最大值max函数用法实例
- PHP+Mysql+jQuery中国地图区域数据统计实例讲解
- PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
- 查看所有的Server Variables的环境变量
- JS根据生日月份和日期计算星座的简单实现方法
- 推荐个Css的filter常用滤波器属性及语句大全
- js 禁止选择功能实现代码(兼容IE/Firefox)
- jquery无缝向上滚动实现代码
- C#基于OLEDB获取Excel文件表结构信息的方法
- PHP 登录记住密码实现思路
- 谈谈关于JavaScript 中的 MVC 模式
- 配置IIS服务器 支持sis下载等
- 九招Windows 2003系统设置小技巧
- 阿里云LNMP 云服务器重启后网站打不开解决方法
- C语言实现2048小游戏
- php中注册器模式类用法实例分析
- PHP文件上传原理简单分析