我正在使用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的空地图。正面和背面都没有任何错误或异常。
可能是什么原因? 谢谢
答案 0 :(得分:0)
在您的情况下,很可能getParameterMap()
确实是空的,因为参数不是作为查询传递的,而是作为从您的网站发送的HTTP请求的正文(内容)传递的。
它也可能受到HTTP请求的Content-Type
和Accept
标头的影响。
根据官方文档ServletRequest.getParameterMap()返回:
对于HTTP servlet,参数包含在查询字符串或发布的表单数据中。
通常“发布的表单数据”意味着:HTTP请求内容中的HTTP标头Content-Type: application/x-www-form-urlencoded
和URL编码的名称/值对。
如果您的网站发送application/json
,任何其他内容类型,或者根本没有定义内容类型,则servlet容器可能未将其正确映射到请求参数中。在这种情况下,您应该查看HTTP请求(ServletRequest.getReader())的主体以获取有效负载,或者让Spring MVC进行此操作(例如@RequestBody
批注)。