整数输入的 Spring Restcontroller/MockMvc 问题

问题描述 投票:0回答:1

显然我有这样的情况,客户端想要将整数值传递给 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 对其进行测试?任何领导表示赞赏。

java spring-boot postman mockmvc
1个回答
0
投票

RequestBuilder handleSignalRequest = MockMvcRequestBuilders.post("/handleSignal") .requestAttr("signalId", 1); mockMvc.perform(handleSignalRequest) .andExpect(MockMvcResultMatchers.status().isOk());

您正在使用

MockHttpServletRequestBuilder#requestAttr
错误的方法,正如其名称所示,当您有兴趣使用 signalid 参数发送您的 http post 查询时,就像您对邮递员所做的那样设置请求属性。为了达到预期的结果,您可以使用
MockHttpServletRequestBuilder#param
方法,这样您的请求参数将从查询字符串中解析出来,如下所示,并在您提供的测试中具有预期的行为:

RequestBuilder handleSignalRequest = 
               MockMvcRequestBuilders.post("/handleSignal")
                                     .param("signalId", "1");
© www.soinside.com 2019 - 2024. All rights reserved.