Junit测试中LocalDateTime反序列化的问题

LocalDateTimeJunit测试中反序列化有问题。我有简单的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());

}

}

回答:

ObjectMapper在测试中创建新的:

MyDto dto = new ObjectMapper().readValue(json, MyDto.class);

尝试ObjectMapperSpring上下文注入或手动注册模块:

mapper.registerModule(new JavaTimeModule());

以上是 Junit测试中LocalDateTime反序列化的问题 的全部内容, 来源链接: utcz.com/qa/424002.html

回到顶部