Как протестировать контроллер Spring Mvc, который возвращает выводимый на страницу результат с Mock Mvc? - PullRequest
0 голосов
/ 04 марта 2020

Использование пружинной загрузки 2.2.4.

У меня есть Spring Mvc Контроллер, который возвращает доступные для печати объекты:

@RestController
@RequestMapping("/call-data")
public class CallDataController {
  @GetMapping
  public Page<CallDataDto> findAll(Pageable page) {
...

Попытка проверить его с помощью Mock Mvc:

ObjectMapper mapper = new ObjectMapper();
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/call-data")).andReturn();
Page<CallDataDto> myDtos = mapper.readValue(mvcResult.getResponse().getContentAsString(), TypeUtils.pageTypeRef());

...

public class TypeUtils {
  public static <T> TypeReference<RestResponsePage<T>> pageTypeRef() {
      return new TypeReference<>() {
};
}

Но вместо страницы с объектами dto я получаю страницу с LinkedHashMaps.

Так как же получить страницу с объектами dto?

1 Ответ

0 голосов
/ 04 марта 2020

Аналогичный вопрос: ObjectMapper, использующий TypeReference, не работает при передаче типа в generi c метод

Вы можете решить проблему, заменив параметр типа (T) на CallDataDto.

public class TypeUtils {
  public static TypeReference<RestResponsePage<CallDataDto>> pageTypeRef() {
      return new TypeReference<>() {
};
}

Параметры типа (например, <T>) не существуют во время выполнения, поэтому вы должны заменить их некоторыми конкретными значениями, чтобы Jackson мог получить полную информацию о типовых типах.

...