Spring mvc Controller接收參數相關的註解

與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接收參數的知識細節還有很多,本文只做簡單的介紹!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章