如何在Spring Rest中使用MockMVC测试Map参数

时间:2015-10-01 10:54:27

标签: java dictionary spring-restcontroller mockmvc

Spring Rest 中,我有一个 RestController 公开此方法:

@RestController
@RequestMapping("/controllerPath")
public class MyController{
    @RequestMapping(method = RequestMethod.POST)
    public void create(@RequestParameter("myParam") Map<String, String> myMap) {
         //do something
    }
}

我希望使用 Spring 中的MockMVC测试此方法:

// Initialize the map
Map<String, String> myMap = init();

// JSONify the map
ObjectMapper mapper = new ObjectMapper();
String jsonMap = mapper.writeValueAsString(myMap);

// Perform the REST call
mockMvc.perform(post("/controllerPath")
            .param("myParam", jsonMap)
            .andExpect(status().isOk());

问题是我收到 500 HTTP错误代码。我很确定这是因为我使用 Map 作为我的控制器的参数(我尝试将其更改为String并且它可以工作)。

问题是:如何在 RestController 中的参数中设置 Map ,并使用 MockMVC 正确测试?< / p>

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我知道这是一篇过时的文章,但是遇到了相同的问题,最终解决了以下问题:

我的控制器是:

@GetMapping
public ResponseEntity findUsers (@RequestParam final Map<String, String> parameters) {
//controller code
}

在单元测试中,我做到了:

MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.put("name", Collections.singletonList("test"));
parameters.put("enabled", Collections.singletonList("true"));

final MvcResult result = mvc.perform(get("/users/")
                .params(parameters)
                .contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(status().isOk())
                .andReturn();