Я пишу тест на интеграцию Java для контроллера REST, который возвращает страницы POJO
@GetMapping(“/myEndpoint”)
public Page<MyPOJO> getPOJOs(@Param(“page”) int page, @Param(“size”) int size) {
return new PageImpl<myService.findPOJOs(page, size), 0, 0>();
}
Мой сервис и контроллер работают как положено. Когда вызывается метод getPOJO, он возвращает следующий JSON:
{
“content” : [
{
“theFirstVariable” : “first”
“theSecondVariable” : “second”
},
{
“theFirstVariable” : “first”
“theSecondVariable” : “second”
}
],
//Had to paraphrase here as I’d forgotten the JSON object structure of the Page response
“totalElements” : 2
“pages” : 1
}
В моем интеграционном тесте я пытаюсь использовать ObjectMapper для сопоставления ответа (сделанного через MockMvc get call to endpoint) со списком POJO, но я получаю ошибки, в которых говорится, что «content» является нераспознанным атрибутом класса POJO. Я понимаю, почему это так - картограф сначала пытается сопоставить атрибут содержимого, а потом не видит массив POJO. Но если я настраиваю маппер на игнорирование неизвестных свойств, он просто возвращает список POJO с нулевыми значениями для каждой переменной. Можно ли как-то убрать информацию о разбиении на страницы из ответа и оставить только массив POJO, которые я затем смогу сопоставить с объектом List? Я нашел очень хакерское решение, но оно не очень безопасно.
Мой тест:
@Autowired
private MockMvc mockMvc;
@Test
public void testGetPOJOs() {
MvcResult mvcResult = mockMvc.perform(get(“/myEndpoint”)).andDo(print()).andExpect(status().isOk()).andReturn();
String response = mvcResult.getResponse.getContentString();
ObjectMapper mapper = new ObjectMapper().configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
TypeReference<List<MyPOJO>> typeReference = new TypeReference<List<MyPOJO>>() {};
List<MyPOJO> myPOJOs = mapper.readValue(response, typeReference); //This is resulting in a list of POJOs with each of their variables as null
}
Что я должен сделать, чтобы правильно отобразить постраничный ответ?