MockMVC 在带有 post 请求的请求参数中添加带有字符串的附加引号
MockMVC adds additional quotes with string in request param with post request
MockMvc 在请求生成器 param()
中传入时在字符串末尾添加引号,如下所示
// initialization of mockMvc
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
ObjectNode tweets = ((ObjectNode) result.getRequest().getAttribute("tweets"));
String query = tweets.get("query").toString();
String nextToken = tweets.get("meta").get("next_token").toString();
mockMvc.perform(MockMvcRequestBuilders.post("/next")
.param("query", query)
.param("next_token", nextToken)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.isError", is("N")))
.andReturn();
如果查询是 "#GoGreen"
并且 next_token 是 "wefw234234ewf234"
在控制器中收到是
查询 = "\"#GoGreen\""
和 next_token = "\"wefw234234ewf234\""
@PostMapping("/next") @ResponseBody
public ResponseEntity<Object> nextPageTrendingTweets(@RequestParam("query") String query,
@RequestParam("next_token") String nextToken)
也许我在初始化时遗漏了一些东西 mockMvc
。我搜索了这个问题,但找不到任何解决方案。
片段部分 (#foo
) 完全存在于浏览器中,不会在 HTTP 请求中传递。根本不发。
问题不在于 mockMvc,而在于您如何从 ObjectNode
“tweets”中提取数据。您已使用 .toString()
方法获取字符串数据。但是,这是不正确的,因为 ObjectNode.get()
方法 returns 对象和 .toString()
将其转换为字符串表示形式,这就是额外引号的原因。所以问题的解决方案是使用 ObjectNode.get().asText()
方法,该方法将 return 对象中的确切字符串而不进行任何修改或转换。
MockMvc 在请求生成器 param()
中传入时在字符串末尾添加引号,如下所示
// initialization of mockMvc
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
ObjectNode tweets = ((ObjectNode) result.getRequest().getAttribute("tweets"));
String query = tweets.get("query").toString();
String nextToken = tweets.get("meta").get("next_token").toString();
mockMvc.perform(MockMvcRequestBuilders.post("/next")
.param("query", query)
.param("next_token", nextToken)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.isError", is("N")))
.andReturn();
如果查询是 "#GoGreen"
并且 next_token 是 "wefw234234ewf234"
在控制器中收到是
查询 = "\"#GoGreen\""
和 next_token = "\"wefw234234ewf234\""
@PostMapping("/next") @ResponseBody
public ResponseEntity<Object> nextPageTrendingTweets(@RequestParam("query") String query,
@RequestParam("next_token") String nextToken)
也许我在初始化时遗漏了一些东西 mockMvc
。我搜索了这个问题,但找不到任何解决方案。
片段部分 (#foo
) 完全存在于浏览器中,不会在 HTTP 请求中传递。根本不发。
问题不在于 mockMvc,而在于您如何从 ObjectNode
“tweets”中提取数据。您已使用 .toString()
方法获取字符串数据。但是,这是不正确的,因为 ObjectNode.get()
方法 returns 对象和 .toString()
将其转换为字符串表示形式,这就是额外引号的原因。所以问题的解决方案是使用 ObjectNode.get().asText()
方法,该方法将 return 对象中的确切字符串而不进行任何修改或转换。