Spring MVC 使用对象列表作为请求参数的MockMvc集成测试

ujv3wf0j  于 2022-11-14  发布在  Spring
关注(0)|答案(3)|浏览(222)

我正在使用Spring MVC开发一个REST服务,它将对象列表作为请求参数。

@RequestMapping(value="/test", method=RequestMethod.PUT)
    public String updateActiveStatus(ArrayList<Test> testList, BindingResult result) throws Exception {
        if(testList.isEmpty()) {
            throw new BadRequestException();
        }
        return null;
    }

当我尝试对上述服务进行集成测试时,我无法在请求参数中发送测试对象列表。
以下代码对我不起作用。

List<Test> testList = Arrays.asList(new Test(), new Test());
        mockMvc.perform(put(ApplicationConstants.UPDATE_ACTIVE_STATUS)
                .content(objectMapper.writeValueAsString(testList)))
            .andDo(print());

谁能帮帮忙啊!

pengsaosao

pengsaosao1#

@带有列表或数组的RequestParam

@RequestMapping("/books")
public String books(@RequestParam List<String> authors,
                         Model model){
    model.addAttribute("authors", authors);
    return "books.jsp";
}

@Test
public void whenMultipleParameters_thenList() throws Exception {
    this.mockMvc.perform(get("/books")
            .param("authors", "martin")
            .param("authors", "tolkien")
    )
            .andExpect(status().isOk())
            .andExpect(model().attribute("authors", contains("martin","tolkien")));
}
3htmauhk

3htmauhk2#

使用Gson库将列表转换为json字符串,然后将该字符串放入内容中
还要将@RequestBody注解和方法参数放在控制器中
public String updateActiveStatus(@RequestBody ArrayList<...

vxbzzdmp

vxbzzdmp3#

如果RequestParams使用参数作为List:
在我的例子中,它是一个枚举值列表。

when(portService.searchPort(Collections.singletonList(TypeEnum.NETWORK))
                .thenReturn(searchDto);

ResultActions ra = mockMvc.perform(get("/port/search")
        .param("type", new String[]{TypeEnum.NETWORK.name()}));

相关问题