У меня проблемы LocalDateTime
десериализация в Junit
тесте.У меня есть простой REST API
, который возвращает некоторый DTO
объект.Когда я звоню своей конечной точке, с ответом проблем нет - это правильно.Затем я пытаюсь написать модульный тест, получить MvcResult
и с использованием ObjectMapper
преобразовать его в мой DTO
объект.Но я все еще получаю:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.time.LocalDateTime` out of START_ARRAY token
at [Source: (String)"{"name":"Test name","firstDate":[2019,3,11,18,34,43,52217600],"secondDate":[2019,3,11,19,34,43,54219000]}"; line: 1, column: 33] (through reference chain: com.mylocaldatetimeexample.MyDto["firstDate"])
Я пытался с @JsonFormat
и добавлял compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.8'
к своему build.gradle
, но я использую Spring Boot 2.1.3.RELEASE
, так что он участвует в этом.Я понятия не имею, как это исправить.Моя простая конечная точка и модульный тест ниже:
@RestController
@RequestMapping("/api/myexample")
public class MyController {
@GetMapping("{id}")
public ResponseEntity<MyDto> findById(@PathVariable Long id) {
MyDto myDto = new MyDto("Test name", LocalDateTime.now(), LocalDateTime.now().plusHours(1));
return ResponseEntity.ok(myDto);
}
}
MyDto класс
public class MyDto {
private String name;
private LocalDateTime firstDate;
private LocalDateTime secondDate;
// constructors, getters, setters
}
Модульный тест
public class MyControllerTest {
@Test
public void getMethod() throws Exception {
MyController controller = new MyController();
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/api/myexample/1"))
.andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
String json = mvcResult.getResponse().getContentAsString();
MyDto dto = new ObjectMapper().readValue(json, MyDto.class);
assertEquals("name", dto.getName());
}
}