Как проверить Post-запрос с настраиваемым объектом в типе содержимого application / x-www-form-urlencoded?

У меня есть контроллер:

    @PostMapping(value = "/value/", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public String updateSettings(final Dto dto) {
        System.out.println(">>> " + dto);
        return "template";
    }

Контроллер работает, если я отправляю запрос через окно Chrome. Но когда я пишу тест для этого метода, у меня возникают проблемы. Непреобразованный объект, значение не вставлено.

Тестовое задание:

@Test
    @WithMockUser(username = FAKE_VALID_USER, password = FAKE_VALID_PASSWORD)
    public void test_B_CreateDtoWithValidForm() throws Exception {

        final Dto dto = new Dto();
               dto.setId("value");
               dto.setEnabled("true");

        this.mockMvc.perform(post(URL_SET_PROVIDER_SETTINGS)
                .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
                .content(dto.toString()))
                    .andDo(print());
  }

Вывод: >>> Dto {id = null, enabled = false}

Как проверить Post-запрос с настраиваемым объектом в типе содержимого application / x-www-form-urlencoded?


person makson    schedule 27.10.2017    source источник


Ответы (1)


В этом случае вам не нужно использовать content, но вместо этого вам нужно использовать param следующим образом:

this.mockMvc.perform(post(URL_SET_PROVIDER_SETTINGS)
            .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
            .param("id", "value")
            .param("enabled", "true"))
            .andDo(print());
person Fabio Maffioletti    schedule 27.10.2017