与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接收参数相关的注解
发布评论