如何使用内容类型 application/x-www-form-urlencoded 中的自定义对象测试 Post 请求?
How test Post request with custom object in content type 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 window. 发送请求,控制器会工作但是当我为此方法编写测试时,我遇到了问题。未转换对象,未插入值。
测试:
@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());
}
Output is >>> Dto{id=null, enabled=false}
如何使用内容类型 application/x-www-form-urlencoded 中的自定义对象测试 Post 请求?
在这种情况下你不需要使用content
,而是需要这样使用param
:
this.mockMvc.perform(post(URL_SET_PROVIDER_SETTINGS)
.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
.param("id", "value")
.param("enabled", "true"))
.andDo(print());
我有控制器:
@PostMapping(value = "/value/", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String updateSettings(final Dto dto) {
System.out.println(">>> " + dto);
return "template";
}
如果我通过 chrome window. 发送请求,控制器会工作但是当我为此方法编写测试时,我遇到了问题。未转换对象,未插入值。
测试:
@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());
}
Output is >>> Dto{id=null, enabled=false}
如何使用内容类型 application/x-www-form-urlencoded 中的自定义对象测试 Post 请求?
在这种情况下你不需要使用content
,而是需要这样使用param
:
this.mockMvc.perform(post(URL_SET_PROVIDER_SETTINGS)
.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
.param("id", "value")
.param("enabled", "true"))
.andDo(print());