我正在使用带有MockMvcRequestBuilders的spring-boot-test来测试一些GET rest rest服务。
问:是否可以将bean自动转换为get-query
示例:
@AutoConfigureMockMvc
public class WebTest {
@Autowired
protected MockMvc mvc;
@Test
public void test() {
MyRequest req = new MyRequest();
req.setFirstname("john");
req.setLastname("doe");
req.setAge(30);
mvc.perform(MockMvcRequestBuilders
.get(path)
.contentType(MediaType.APPLICATION_JSON)
.param(...) //TODO how to automatically add all params?
.andExpect(status().isOk());
}
}
public class MyRequest {
private String firstname;
private String lastname;
private int age;
}我需要一个自动转换为:?firstname=john&lastname=doe&age=30,但以一种更通用的方式,而不必静态地键入参数。
发布于 2018-07-19 06:07:46
我不认为有任何现成的东西可以满足这个特定的需求,但您可以使用BeanWrapperImpl从MyRequest访问属性,并将每个属性转换为对请求构建器上的param的调用:
MyRequest req = new MyRequest();
req.setFirstname("john");
req.setLastname("doe");
req.setAge(30);
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders
.get(path).contentType(MediaType.APPLICATION_JSON);
for (PropertyDescriptor property : new BeanWrapperImpl(req).getPropertyDescriptors()) {
if (property.getWriteMethod() != null) {
requestBuilder.param(property.getName(),
property.getReadMethod().invoke(req).toString());
}
}
mvc.perform(requestBuilder).andExpect(status().isOk());https://stackoverflow.com/questions/51405830
复制相似问题