与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接收参数的知识细节还有很多,本文只做简单的介绍!

 

更多推荐

Spring mvc Controller接收参数相关的注解