Тест интеграции Spring Boot - Map Raginate REST Response - PullRequest
0 голосов
/ 15 сентября 2018

Я пишу тест на интеграцию 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
}

Что я должен сделать, чтобы правильно отобразить постраничный ответ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...