Я пытался в течение нескольких часов кодировать JSON в качестве параметра запроса для теста, который я пишу, используя MockMVC Spring, но не повезло.Как кодировать JSON в качестве параметра запроса с помощью Spring MockMVC
Мой тест выглядит
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new TestController())
.build();
}
@Test
public void shouldReturnJSONGeneratedByView() throws Exception {
String sampleJson = "{\"key\":\"value\"}";
String json = UriComponentsBuilder.newInstance()
.path(sampleJson)
.build().encode().toUriString();
mockMvc.perform(MockMvcRequestBuilders.get("/Node?json="+json))
.andExpect(status().isOk());
}
но строка, которая достигает мой контроллер по-прежнему кодируется ("% 7B% 22key% 22:% 22value% 22% 7D") и поэтому не может быть десериализации, как JSON.
Что мне не хватает, чтобы получить весну, чтобы понять закодированные параметры?
Спасибо за любую помощь
Почему вы просто декодировать его, а затем использовать его как JSON. – erhun
Это часть существующего приложения, которое отлично работает при проверке вручную (контроллер получает декодированный JSON), но я пытаюсь добавить некоторые автоматизированные тесты. Поскольку функциональность работает, я не хочу менять контроллер на случай, если я сломаю что-то –
Хорошо, я понимаю, что я не думаю, что вы нарушите что-то, проблема должна быть в вашем конвертере JSON не работает, когда вы вызываете его из MockMvcRequestBuilders.get, потому что это не запрос прийти к Spring DispatcherServlet и некоторые аннотации (которые могут обеспечить конверсии), возможно, будет полезно разделить код контроллера и проверить ваши настройки Spring. Честно говоря, Контроллер не должен быть таким же, как и вы, вам следует написать тесты для вашего уровня сервиса. – erhun