Я использую spring -boot 2.1.6, и есть API для принятия формы, включающей дату, например:
@Data
public class MyForm {
private LocalDate date;
...
}
@Controller
public class MyController {
@PostMapping("...")
public ResponseEntity<...> post(@RequestBody MyForm myForm) {
...
}
}
По умолчанию spring MVC принимает этот JSON формат:
{
"date": [2020, 6, 17],
...
}
Итак, в Front-End мой код JavaScript просто отправляет такую форму, т.е. JS преобразует дату в массив.
Но когда я запускаю spring- загрузочный тест, эта сериализация не работает со следующим кодом:
private ObjectMapper mapper = new ObjectMapper();
@Autowired
private MockMvc mockMvc;
@Test
public void doTest() {
MyForm form = ...
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/...").
contentType("application/json").content(mapper.writeValueAsString(form)).andReturn();
...
}
Это потому, что Джексон по умолчанию сериализует LocalDate как:
{
"date": {
"year":2020,
"month":"JUNE",
"monthValue":6,
...
}
...
}
Как упоминалось здесь: LocalDate Сериализация: дата в виде массива? , существует множество конфигураций для принудительной сериализации данных при загрузке Spring в формате yyyy-MM-dd
. Но я не хочу менять свой код JS. Я просто хочу, чтобы мой тестовый пример работал.
Как я могу настроить ObjectMapper
, чтобы Джексон сериализовал LocalDate в массив? Я просто хочу получить это:
{
"date": [2020, 6, 17],
...
}
ОБНОВЛЕНИЕ
LocalDate
вот java.time.LocalDate
, но не org.joda.time.LocalDate
.