與Spring mvc Controller接收參數直接相關的有三個註解:@RequestParam、@PathVariable和@RequestBody。
- @RequestParam: 取query string當中的參數,query string參數就是請求url中的查詢參數,例如:/test?id=1,這裏的id就是query string。打開Chrome瀏覽器的調試工具,打開Network選項卡,點擊一個請求查看header選項卡,如圖所示,可以清楚的看到Query String Parameters:
- @PathVariable: 取映射URL中的佔位符,也就是@RequestMapping中定義的佔位符中的參數(例如:/test/{id})
- @RequestBody: 取request 請求體中的參數 (一般是json對象,由Spring MVC負責轉成Java對象),請求的Content-Type必須設置成application/json纔可以。打開Chrome的調式工具也可以看到請求體中的參數:
下面代碼是一個使用@RequestParam和@RequestBody參數的例子:
前端使用jquery ajax發送post請求:
var questions = [];
var question= {
questionId:qId,
questionType:qType,
questionOrder:qOrder,
questionNum:qNum,
questionTitle:qTitle,
questionOptions:qOptions,
inputPlaceholder:inputPlaceholder
}
questions.push(question);
$.ajax({
url:"http://localhost:80/saveQuestions?id=1",
type:"post",
contentType:"application/json",
data:JSON.stringify(questions),
success:function(data){
console.log(data);
},
error:function(data){
console.log(data)
}
});
注意:這裏的參數是一個json數組。
後端Spring mvc Controller:
@RestController
public class TestController {
@CrossOrigin(maxAge = 3600)
@RequestMapping(value = "/saveQuestions")
public ApiResponseData saveTemplateData(@RequestParam int id,
@RequestBody List<QuestionParam> questions){
System.out.println(id);
System.out.println(questions);
return ApiResponse.ok();
}
}
方法的入參@RequestParam int id,這裏的id接收請求url中‘?’後邊的參數。
@RequestBody List<QuestionParam> questions 接收請求體中的數據,由Spring MVC自動封裝成java對象。需要注意的是如果前端傳的參數一個json數組,後端控制器一定List<>接收,不可用對象數組接收。
關於Spring MVC接收參數的知識細節還有很多,本文只做簡單的介紹!