关于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)在需
-
使用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
-
解决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序列化和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
随机推荐
- MongoDB 查询操作的实例详解
- 实用CSS 文字收集
- 给Win2K系统加装纯DOS支持
- Win2008,windows2008序列号查看器
- tomcat环境变量详细配置步骤
- 自制杀u盘病毒的批处理代码
- iOS开发-自定义相机实例(仿微信)
- php面向对象全攻略 (十二) 抽象方法和抽象类
- go语言执行windows下命令行的方法
- ASP编程入门进阶(十七):FSO组件之文件夹操作
- C# List中FindAll用法的一些简单示例
- MYSQL索引无效和索引有效的详细介绍
- yii的CURD操作实例详解
- 原生js编写autoComplete插件
- Ntdll32.dll病毒清除方法
- 微信小程序 textarea 详解及简单使用方法
- 关于 文本框默认值 的操作js代码
- php笔记之:文章中图片处理的使用
- 一个完整的php文件上传类实例讲解
- Android使用自定义字体的方法