Spring Cloud服务feign调用date类型相差14小时

一:背景

        项目需求查询某天之前的所有数据,使用A服务Feign调用B服务,date做参数,发现请求到B服务之后date参数多了14个小时。

@GetMapping("/query")
public Response query(@RequestParam(name = "sendTimeEnd") Date sendTimeEnd);

二:探索

       经多方查证,发现feign处理参数的时候会调用new Date(sendTimeEnd.toString)方法,该方法已弃用,方法上有一段注释,建议用DateFormat.parse代替new Date() 。

 replaced by <code>DateFormat.parse(String s)</code>.

public static void main(String[] args) throws ParseException {
		Date date = new Date();
		Date date1 = new Date(date.toString());

		System.out.println(date); // Mon Nov 28 17:15:34 CST 2022
		System.out.println(date1); // Tue Nov 29 07:15:34 CST 2022

	}

三:解决方案

1. 同时修改A服务和B服务,A服务date参数改为long类型,B服务date参数改为long类型。这样就不会遇到时差问题。

2.A服务添加feign处理类

@Configuration
public class FeignDateFormatRegister implements FeignFormatterRegistrar {
    @Override
    public void registerFormatters(FormatterRegistry registry) {
        registry.addFormatter(dateFormatter());
    }

    @Bean
    public DateFormatter dateFormatter() {
        return new DateFormatter("yyyy-MM-dd HH:mm:ss.SSS");
    }

}

 B服务接收参数加@DateTimeFormat注解。

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
private Date sendTimeEnd;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值