#spring-boot #jackson #objectmapper #openfeign
#весенняя загрузка #джексон #objectmapper #openfeign
Вопрос:
Мой клиент Feign определяется следующим образом :
@FeignClient(name = "${feign.name}",url = "${feign.url}",
configuration = {DateFormatConfiguration.class})
public interface MyFeignClient {
@GetMapping(value = "/test")
ResponseEntity<MyResponse> getResponse(@RequestParam(value = "date") Date date);
}
Где :
class DateFormatConfiguration {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
@Bean
public FeignFormatterRegistrar dateFeignFormatterRegistrar() {
return formatterRegistry -> formatterRegistry.addFormatter(new Formatter<Date>() {
@Override
public Date parse(String text, Locale locale) throws ParseException {
return df.parse(text);
}
@Override
public String print(Date object, Locale locale) {
return df.format(object);
}
});
}
}
Однако, когда я запускаю этот тест :
@Test
public void test(){
Date date= new GregorianCalendar(2000, 12, 31).getTime();
myFeignClient.getResponse(date);
}
запрос отправляется в этом формате :
---> GET https:xxx/test?date=Wed Jan 31 00:00:00 EST 2001
То, что я пытаюсь получить, это :
---> GET https:xxx/test?date=2000-12-31
Где дата форматируется так, как мне нужно.
Я также пробовал это решение, но не работал ни:
class DateFormatConfiguration {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
@Bean
public JacksonEncoder feignEncoder() {
return new JacksonEncoder(customObjectMapper());
}
@Bean
public JacksonDecoder feignDecoder() {
return new JacksonDecoder(customObjectMapper());
}
private ObjectMapper customObjectMapper(){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(df);
return objectMapper;
}
}
Есть идеи?
Ответ №1:
Вам следует подумать о том, чтобы попытаться заменить необходимые строки чем-то вроде этого:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date= LocalDate.ofInstant(new GregorianCalendar(2000, 12, 31).getTime().toInstant(), ZoneId.of(TimeZone.getDefault().getID()));
String dateFormatted = date.format(dtf);
Комментарии:
1. это дата, а не локальная дата, и моя проблема связана с притворством
2. нет, это не так. вы просто предоставляете неверно сформированную дату из другого места и пытаетесь настроить feign, чтобы проанализировать ее так, как вы хотите. попробуйте применить приведенные выше строки в методе тестирования без каких-либо ненужных настроек