步骤1: Ajax请求:无法发送JSON作为请求体弹簧控制器
$.ajax({
url: "url",
type: "POST",
dataType: 'json',
data:{
'id': '1',
'type': 'BOOK_VIEWED',
'access_token': response.response.access_token
},
crossDomain: true,
success: function() { }
});
步骤2执行从弹簧控制器方法之前请求 GET参数;这里有两个变种:
- 变体1:如果我在头与
content-type: json
发送Ajax请求,这将不工作;否则会:
String token = request.getParameter(HEADER_SECURITY_TOKEN);
- 变2:如果我在报头中设置
content-type: json
,这将工作:
StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null)
sb.append(line).append('\n');
STEP 3.春季控制器bookOpened
方法应执行:
@RequestMapping(value = "/event",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
public void bookOpened(@RequestBody PostEvent postEvent, HttpServletRequest request) {
// ..
}
试图运行时,不执行bookOpened
方法,并且引发415(unsupported media type) Exception
。如果方法签名更改为仅接受:HttpServletRequest request
参数(不包含@RequestBody
参数),它将起作用;但这对我来说不是一个可行的解决方案。
的主要问题:
- 在步骤2中,我想获得从请求的参数。
- 在步骤3中,我想包括
@RequestBody
参数,而不仅仅是参数HttpServletRequest
。
您是否在项目中包含了依赖项:'jackson-core'和'jackson-databin'? –
你如何在**控制器之前获得params **?用拦截器或其他方式? –