1 场景 通过feign调用远程接口,需要传参Date,又不想使用dto进行封装
2 解决方案
2.1 方案一
服务提供方,继承Spring的Converter接口,重写convert()方法,进行解析
public Date convert(String source){
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM ddHH:mm:ss 'GMT' yyyy",Locale.US);
Date date =sdf.parse(source);
return date ;
}
全局配置,使用前需要确定当前系统是否已经存在自定义Converter,防止已存在的Converter被覆盖掉
2.2 方案二(推荐)
feign配置中,自定义序列化方式
@Configuration
public class FeignDateFormatRegister implements FeignFormatterRegistrar {
@Override
public void registerFormatters(FormatterRegistry registry) {
// 解决feign接口传参Date,会被format为 Mon Feb 06 11:47:25 CST 2023 格式
registry.addPrinter(new Printer<Date>() {
@Override
public String print(Date object, Locale locale) {
return DateFormatUtils.format(object, "yyyy-MM-dd HH:mm:ss");
}
});
}
}
同方案一,需要确定当前系统是否已自定义Printer,防止冲突
3 效果
@PostMapping("/testDate")
void testDate(@RequestParam Date test);
feign接口调用可用@RequestParam正常传参Date