в настоящее время я пытаюсь сопоставить dto с классом, который также содержит атрибут LocalDate. Просто у меня здесь нет успеха, и локальное поле даты всегда остается нулевым. Итак, я создал небольшой пример, в котором я следовал довольно полезным советам из Modelmapper для преобразования от String до LocalDate Итак, у меня есть такой класс ModelMapper:
@Bean
public ModelMapper createMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.createTypeMap(String.class, LocalDate.class);
Provider<LocalDate> localDateProvider = new AbstractProvider<LocalDate>() {
@Override
public LocalDate get() {
return LocalDate.now();
}
};
Converter<String, LocalDate> toStringDate = new AbstractConverter<String, LocalDate>() {
@Override
protected LocalDate convert(String source) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(source, format);
return localDate;
}
};
modelMapper.getTypeMap(String.class, LocalDate.class).setProvider(localDateProvider);
modelMapper.addConverter(toStringDate);
return modelMapper;
}
Кроме того, у меня есть POJO, в котором есть только 2 поля, идентификатор и локальная дата (без геттеров и сеттеров для удобства чтения.
public class JsonLocalDate {
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate ld;
public Long getId() {
return id;
}
И я создал тестовый класс, в котором я попытался имитировать json-часть с помощью LinkedHashMap, поскольку она присутствует в реализованных мною веб-сервисах:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class ModelMapperTest {
@Autowired
ModelMapper mapper;
String jsonLd = "2018-06-11";
LinkedHashMap<String, String> lhm;
@Before
public void init() {
lhm = new LinkedHashMap<>();
lhm.put("id", "1");
lhm.put("ld", jsonLd);
}
@Test
public void checkModelMapper() {
assertNotNull(mapper);
Collection<TypeMap<?, ?>> c = mapper.getTypeMaps();
assertNotNull(c);
for (TypeMap<?, ?> typeMap : c) {
System.out.println("TypeMap : " + typeMap.getConverter().toString());
}
}
@Test
public void testLocalDate() {
LocalDate ld = mapper.map(jsonLd, LocalDate.class);
assertNotNull(ld);
assertEquals(ld, LocalDate.parse(jsonLd,
DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
@Test
public void testLocalDateInObject() {
JsonLocalDate jld = mapper.map(jsonLd, JsonLocalDate.class);
assertNotNull(jld);
assertEquals(jld.getLd(), LocalDate.parse(jsonLd,
DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
}
testLocalDate, где я просто сопоставляю String с LocalDate, работает нормально, а testLocalDateInObject не работает.
Кто-нибудь знает, как я должен иметь дело с полями LocalDate, чтобы их сопоставить?
Заранее спасибо !
Ваше здоровье
Joern