1

问题描述

为了方便统一管理服务接口调用,服务调用 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


江州司马
12 声望1 粉丝