前端向后端传递参数,后端怎么去接收,就会想到 spring
的注解前端
以前的话,我一直用的是 RequestParam("userName") String userName
这种形式,讲道理不怎么用 RequestParam String userName
java
无心间该去看看这两个是有什么不一样了.spring
若是不写 @RequestParam(xxx) 注解的话,那么就前端能够有 能够没有对应的xxx名字都行 若是有xxx名,那么就会自动匹配; 若是没有,请求也能正确发送。
/** * 用户登陆 * @param userName * @param password * @return */ @RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestParam String userName, @RequestParam String password){ public BaseResponse login(@RequestParam("user") String userName, @RequestParam("psd") String password){
若是前端不传 userName
或者 password
参数名的参数就会报错json
1. 用 @RequestParam 前端传过来的参数名默认为 userName 咱们String后面起的参数名
若是前端不传 user
或者 psd
参数名的参数就会报错segmentfault
2. 用 @RequestParam("user") @RequestParam("psd"), 给前端传递过来的参数指定参数名
错误信息后端
3. "message":"Required String parameter 'userName' is not present"
其实还有其余的形式app
看下面ui
@RequestParam(value="user" required=false) 这个注解
能够经过 required = false
或者 true
来要求 @RequestParam配置的前端参数是否必定要传 spa
required = false 表示不传的话,会给参数赋值为 null ,required = true
就是必需要有 .net
注意:若是@requestParam注解的参数是int类型,而且required=false,此时若是不传参数的话,会报错。缘由是,required=false时,不传参数的话,会给参数赋值null,这样就会把null赋值给了int,所以会报错。
使用 Integer 包装类型的话还要须要注意空指针异常
@RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestBody String jsonStr){
@RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestBody User user){
@RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestBody Team team){
参考: 笔者JustryDeng