显然,我遇到了这样的情况,客户端希望将整数值传递给其中一个REST端点。看起来确实像
@PostMapping("/handleSignal")
public ResponseEntity<Object> handleSignal(@RequestParam @NotNull Integer signalId)
我已经使用过@RequestParam
,并在Postman上成功测试过。然而,在使用Spring MockMvc
进行测试时,我没有找到任何传递Integer值的方法。目前为止我的尝试是
RequestBuilder handleSignalRequest =MockMvcRequestBuilders.post(“/handleSignal”).requestAttr(“signalId”,1);mockMvc.perform(handleSignalRequest).andExpect(MockMvcResultMatchers.status().isOk());
但这不会到达端点,并给出400/Bad Request
。
我知道如果我将方法签名更改为
@PostMapping("/handleSignal")
public ResponseEntity<Object> findSignal(@RequestAttribute(name = "signalId") @NotNull Integer signalId)
然后使用MockMvc
进行测试(尝试过)。但在这种情况下,我将失去通过 Postman 测试它的能力。
什么是理想的解决方案,以便能够通过Postman和Spring MockMvc进行测试?任何线索都很感激。
1条答案
按热度按时间iqjalb3h1#
RequestBuilder handleSignalRequest =MockMvcRequestBuilders.post(“/handleSignal”).requestAttr(“signalId”,1);mockMvc.perform(handleSignalRequest).andExpect(MockMvcResultMatchers.status().isOk());
您正在使用
MockHttpServletRequestBuilder#requestAttr
错误的方法,正如其名称所示,当您有兴趣发送带有 signalid 参数的httppost查询时,该方法设置了一个请求属性,就像您对postman所做的那样。为了达到预期的结果,你可以使用MockHttpServletRequestBuilder#param
方法,这样你的请求参数将从查询字符串中解析出来,如下所示,在你提供的测试中具有预期的行为: