问题描述
为了方便统一管理服务接口调用,服务调用 HTTP 客户端采用Feign Client,实施下来一直很顺利。负责测试的同事反馈其中一个接口调用报错:Could not extract response: no suitable HttpMessageConverter found for response type ,诡异的事只有这一个接口报错。百度、谷歌都用上,大部分文章说要增加依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
试过不管用,在国外技术网站发现一种说法是服务端 Response 消息没有指定 Content-Type, 也学着在 Configuration 类中手工增加 application/json 的 Content-Type ,还是无法解决问题。
原因分析
静下来看看日志信息,发现客户端实际上已经获取到了接口返回的json信息,并且在日志中能看到标示的信息格式就是 application/json ,那问题只能出在信息反序列化的阶段了。根据以往经验,先分析信息特征,没发现异常,唯一特殊的是里面有两个字段是日期格式,记得之前遇到过 Spring 自带的 Gson 序列化工具,需要指定日期数据的格式化规则,赶紧查看用于反序列化的模型类,发现带日期的字段,并没有注解日期格式规则,赶紧加上,启动项目测试,问题解决!!!
解决方法
在数据类型为日期的字段上,增加 JsonFormat 注解,并指定格式规则。
示例代码
/**
* 区域信息模型
*/
@Data
public class AreaVO extends AreaBaseVO {
/**
* 添加时间
*/
@JsonProperty("create_time")
@JsonFormat(pattern = DateUtilCustom.DATE_TIME_FORMAT)
private Date createTime;
/**
* 最后修改时间
*/
@JsonProperty("update_time")
@JsonFormat(pattern = DateUtilCustom.DATE_TIME_FORMAT)
private Date updateTime;
@Override
public String toString() {
return super.toString();
}
}
其中 DateUtilCustom.DATE_TIME_FORMAT 是预先定义的常量,值为:yyyy-MM-dd HH:mm:ss