【问题标题】:MockMVC adds additional quotes with string in request param with post requestMockMVC 在请求参数中添加带有字符串的附加引号和发布请求
【发布时间】:2021-01-29 05:59:04
【问题描述】:

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 时遗漏了一些东西。我搜索了这个问题,但找不到任何解决方案。

【问题讨论】:

    标签: java spring junit5 mockmvc spring-test-mvc


    【解决方案1】:

    问题不在于 mockMvc,而在于您如何从 ObjectNode“tweets”中提取数据。您已经使用.toString() 方法获取字符串数据。但是,这是不正确的,因为 ObjectNode.get() 方法返回对象并且 .toString() 将其转换为字符串表示形式,这就是额外引号的原因。所以问题的解决方案是使用ObjectNode.get().asText() 方法,它将返回对象中的确切字符串,无需任何修改或转换。

    【讨论】:

      【解决方案2】:

      片段部分 (#foo) 完全位于浏览器内部,不在 HTTP 请求中传递。根本不要发送。

      【讨论】:

      • 我没听懂你在说什么。你能举个例子详细说明一下吗?
      猜你喜欢
      • 2018-06-11
      • 2016-04-26
      • 2022-10-06
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2016-11-08
      相关资源
      最近更新 更多