弹簧接收空体

时间:2018-08-13 22:01:21

标签: spring spring-mvc

我正在使用Spring作为后端。我有以下代码:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@CrossOrigin
public void test(HttpServletRequest request) {
    System.out.println(request.getParameterMap().size());
    System.out.println(new JSONObject(request.getParameterMap()));
}

当我使用Postman发送JSON数据时,会得到我已发送的所有参数的映射。 但是,当我在网站上拨打相同的电话时,会得到一个大小为0的空地图。正面和背面都没有任何错误或异常。

可能是什么原因? 谢谢

1 个答案:

答案 0 :(得分:0)

在您的情况下,很可能getParameterMap()确实是空的,因为参数不是作为查询传递的,而是作为从您的网站发送的HTTP请求的正文(内容)传递的。

它也可能受到HTTP请求的Content-TypeAccept标头的影响。

根据官方文档ServletRequest.getParameterMap()返回:

  

对于HTTP servlet,参数包含在查询字符串或发布的表单数据中。

通常“发布的表单数据”意味着:HTTP请求内容中的HTTP标头Content-Type: application/x-www-form-urlencoded和URL编码的名称/值对。

如果您的网站发送application/json,任何其他内容类型,或者根本没有定义内容类型,则servlet容器可能未将其正确映射到请求参数中。在这种情况下,您应该查看HTTP请求(ServletRequest.getReader())的主体以获取有效负载,或者让Spring MVC进行此操作(例如@RequestBody批注)。