添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

问题描述
Spring Cloud通过Feign客户端调用HTTP接口,如果返回值中包含LocalDateTime类型(包括其他JSR-310中java.time包的时间类),在客户端可能会出现反序列化失败的错误。错误信息如下:

 Caused by:com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2019-11-27T11:04:32')

问题分析
从客户端调用fegin,也是相当于URL传参就相当于经过一次JSON转换,数据库取出‘2019-11-27T11:04:32’数据这时是时间类型,进过JSON之后就变成了String类型,T就变成了字符不再是一个特殊字符,因此String的字符串“2019-11-27T11:04:32”反序列化就会失败
可以结合这两个解决方案深刻理解:
http://blog.didispace.com/Spring-Boot-And-Feign-Use-localdate/

https://www.jianshu.com/p/e0d560d17ee1

问题解决
增加依赖

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.9</version>
</dependency>

字段增加注解
POJO类的LocalDateTime类型字段增加如下注解

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime createTime;
                                    springcloud整合openFeign,包括feign的基本使用、传参、指定特定的服务器、负载均衡等使用方法。
springcloud-feign-api
springcloud-feign-consumer
springcloud-feign-provider
springcloud-feign-providerV2
                                    A服务调用B服务,由于B服务接口实体类中有LocalDateTime字段,导致A服务调用时解析报错,单独调用B服务接口是正常返回数据。2、服务提供方(B服务)接口实体类需要增加注解。
                                    问题描述:
通过openFeign调用接口, 请求能达到服务, 但是返回值中含有LocalDateTime类型参数, 报以下错误:
feign.codec.DecodeException: Type definition error: [simple type, class java.time.LocalDateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot co
最近项目组用feign调用远程服务,消费端报了如下一个异常
从异常信息可以得出localdatime反序列化出了异常,而这个异常又是因为jackson无法处理导致。因此我们可以为jackson的ObjectMapper适配一下
1、在pom.xml引入
    <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                                    2、日期格式,虽然和生产者用的都是一样的yyyy-MM-dd hh:mm:ss,但不改为yyyy-MM-dd HH:mm:ss就始终解析不了。@表面看上去也没看出什么毛病。消费者这个bean和生产者用的是同一个。1、必须移除@AllArgsConstructor。
                                    使用feign接口来进行get请求,
因为参数比较多,所有使用了对象来接收参数,
因为feign会自动将对象参数的请求转换post请求,所以使用@SpringQueryMap注解,将参数自动拼接在url上,
在传递date时间类型时,提示序列化失败问题,
原因是feign在将对象参数转换为url时,直接使用tostring默认转换方法,
date默认转换这种,Wed Apr 26 10:16:06 CST 2023,默认时间格式
在反序列化时失败,
                                    Feign请求java.time序列化错误
                [com.majortom.facade.service.common.PageSlice<com.majortom.facade.service.dto.MsgDTO>] and content type ...
                                    LocalDate 、 LocalTime 、 LocalDateTimeJava 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作。然而,我们在使用Spring Boot或使用Spring Cloud Feign的时候,往往会发现使用请求参数或返回结果中有 LocalDate 、 LocalTime 、 LocalDateTime 的时候会发生各种问题。本文我们...