java Spring Restcontroller/MockMvc整数输入问题

rbl8hiat  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(87)

显然,我遇到了这样的情况,客户端希望将整数值传递给其中一个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进行测试?任何线索都很感激。

iqjalb3h

iqjalb3h1#

RequestBuilder handleSignalRequest =MockMvcRequestBuilders.post(“/handleSignal”).requestAttr(“signalId”,1);mockMvc.perform(handleSignalRequest).andExpect(MockMvcResultMatchers.status().isOk());
您正在使用MockHttpServletRequestBuilder#requestAttr错误的方法,正如其名称所示,当您有兴趣发送带有 signalid 参数的httppost查询时,该方法设置了一个请求属性,就像您对postman所做的那样。为了达到预期的结果,你可以使用MockHttpServletRequestBuilder#param方法,这样你的请求参数将从查询字符串中解析出来,如下所示,在你提供的测试中具有预期的行为:

RequestBuilder handleSignalRequest = 
               MockMvcRequestBuilders.post("/handleSignal")
                                     .param("signalId", "1");

相关问题