Spring Cloud Feign 参数传递Date类型时区错误

今天遇到一个问题,在使用Feign传递java.util.Date类型的对象时,再接收方转换后的时间变成了第二天。

方法一:最简单的办法是传递String类型替代Date类型。

方法二:引用来自CSDN上的代码作解释:

@Component
public class DateFormatRegister implements FeignFormatterRegistrar {

    public DateFormatRegister() {}

    @Override
    public void registerFormatters(FormatterRegistry registry) {
        registry.addConverter(Date.class, String.class, new Date2StringConverter());
    }

    private class Date2StringConverter implements Converter < Date, String > {

        @Override
        public String convert(Date source) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.format(source);
        }

    }
}
-- -- -- -- -- -- -- -- -- -- -
作者: Zany後起之秀
来源: CSDN
原文: https: //blog.csdn.net/Zany540817349/article/details/79868257 
    版权声明: 本文为博主原创文章, 转载请附上博文链接!

其实上述的代码的原理是因为Feign默认对Date使用的是toString()的方式来转换,转换后的时区被标识为Mon Feb 25 22:26:38 CST 2019这样的格式,恶心的是CST可视为美国、澳大利亚、古巴或中国的标准时间。当这个字符串直接传入spring mvc 的参数转为date的时候时区概念就混乱了,所以上述的表示方法等于是讲发送请求时Date类型的参数转换为一种比较常规的时间格式,并在SpringMVC接收端的地方支持解析这种日期格式就可以了。

Leave a Comment

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据