如何为 MockMvcRequestBuilders 构建获取查询字符串?

How to build get-query string for MockMvcRequestBuilders?

我正在使用 spring-boot-testMockMvcRequestBuilders 来测试一些 GET 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,但以更通用的方式不必静态键入参数。

我不认为有任何开箱即用的东西可以满足这个特定要求,但您可以使用 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());