当请求包含Content-Type=application/x-www-form-urlencoded
时,我无法获取请求正文内容。
我有以下检索请求正文的方法:
@RequestMapping(value = "/testRequestBody", method = RequestMethod.POST)
@ResponseBody
public String testRequestBody(@RequestBody String requestBody) {
return requestBody;
}
我正在使用restclient firefox插件来测试请求。当我向请求Content-Type=application/x-www-form-urlencoded
添加requestBody
时,尽管请求正文中包含文本,但变量仍为空。当我删除Content-Type
标题时,请求正文将填充文本。
UPD
这个问题似乎与用于运行spring容器的tomcat有关。当application/x-www-form-urlencoded
请求到来时,它被解析,正文中定义的参数变为请求参数,然后清除正文。
我可以通过以下方式访问body参数:
@RequestMapping(value = "/testRequestBody", method = RequestMethod.POST)
@ResponseBody
public String testRequestBody(@RequestParam("paramName") String paramName) {
return requestParam;
}
如何配置tomcat不解析请求而不清除请求体?
答案 0 :(得分:-1)
当您调用RESTful SAS BI Web服务时,您发送的HTTP标头很重要。 Content-type HTTP标头告诉SAS BI Web Services执行HTTP POST时要发送的内容类型。如果要调用JSON端点,则必须将Content-type设置为application / x-www-form-urlencoded,并且必须使用此格式对内容进行编码。如果要调用XML端点,则必须将Content-type设置为application / xml,并且您的内容必须是XML。 HTTP Accept标头告诉SAS BI Web Services您的客户端可以接受哪种类型的内容作为输出。对于JSON端点,Accept标头必须设置为application / json,对于XML端点,可以设置为application / xml(XML端点不需要此标头)
@RequestMapping(value = "/testRequestBody", method = RequestMethod.POST, headers="Accept=*")
@ResponseBody
public String testRequestBody(@RequestBody String requestBody) {
return requestBody;
}