天天看点

SpringMVC如何接收前端传递的参数四种方式

SpringMVC如何接收前端传递的参数四种方式

@RequestParam注解

@PathVariable注解

1.@RequestParam 获取注解
   1.get/post  url =>"xx/user?id=1"    action =>
public String User( @RequestParams(name="id") Long id ){
}。
   2.@RequestParam定义的参数 会自动解析为 方法定义的类型。
@RequestParams(name="id") Long id )(通过postman模拟post请求)      
1.@PathVariable获取注解
  1.get/post  url =>"xx/user/1"    action =>public String User( @PathVariable(name="id") Long id){}
  2.@PathVariable必须通过正则指定对应的类型 只有当url指定为数字,方法参数定义为数字类型才不会报错。比如:(可以通过其他正则限制url,只有符合条件的url才会映射到对应的action,否则不会找到对应的action)
  @RequestMapping("/user/{id:\\d}")
  public String User( @PathVariable(name="id") Long id){}      
1.SpringMVC,可以不设置任何注解即可接收参数,比如 
   @GetMapping("/category")
   public String category( Long id) {
    System.out.println(id);
    return "post/category";
}
  可以通过  /category 访问 ,也可以通过 /category?id=1 访问
2.SpringMVC ,也可以自动包装成对象 
   url  /category?title=测试    或者  /category  都能访问到目标资源

    @GetMapping("/category")
    public String category( MPost post ) {
        System.out.println(post.getTitle());
        return "post/category";
    }      
1.@RequestBody 用来接收数组或者复杂对象(必须将参数放在requestbody中,放在url并不会被解析,哪怕请求方式是post)
2. url  => /category  requestbody =>{"id":1}
    @PostMapping("/category")
    public String category( @RequestBody Post post ) {
        System.out.println(post.getTitle());
        return "post/category";
    }
3.若为对象数组,将方法参数改为 @RequestBody List<Post> post  即可
4.直接输入 /category并不会找到对应的action      
1.SpringMVC的自动封装(不传参也能进入)
  @RequestParam(必须传参,但可以手动设置为false) 
  @PathVariable(符合设定的正则表达式才允许进入,而且不能为空)
  2.对比可知,主要是为了url提供更加严格的限制,以防止一些其他url进入该action。
  3.提供复杂的接受参数的方式@RequestBody ,但必须将参数放置在@RequestBody中
  4.针对PathVariable 需要注意的是参数中包含特殊字符的问题,可能导致参数不全。
  5.对于各种请求方式,验证一下当前用户,对url进行加密 是有必要的。(尤其是关键数据)      

继续阅读