步驟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 **?用攔截器或其他方式? –