controller方法与前端的参数传递---参数不带注解/@RequestParam/@PathVariable



第一种:参数不带注解



1.直接在controller方法的参数中接受请求参数

此时参数名称一定要和请求参数的名称一致,即usename、password要和前端传过来的参数名一致。

这有个小疑问:前端传过来的参数名又是什么呢?详见另一篇博客:web前后端传值的一些问题

    @RequestMapping("/login")
    public JsonResult<User> login(String username,String password){
        User data = userService.login(username, password);
        return new JsonResult<User>(OK,data);
    }

【适用于get方式提交,不适用于post方式提交。若"Content-Type"="application/x-www-form-urlencoded",可用post提交】

【url:http://localhost:8080/users/login?username=Tom&password=1234】



2.通过HttpServletRequest接收

  • HttpServletRequest和HttpServletResponse也可以进行参数传递。

  • Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest


 @RequestMapping("/addUser2")
 public String addUser2(HttpServletRequest request) {
   String username=request.getParameter("username");
   String password=request.getParameter("password");
   System.out.println("username is:"+username);
   System.out.println("password is:"+password);
   return "demo/index";
 }

【post方式和get方式】



3.多个参数还可以使用java类来接收

@RequestMapping("/addUser3")
public String addUser3(UserModel user) {
  System.out.println("username is:"+user.getUsername());
  System.out.println("password is:"+user.getPassword());
  return "demo/index";
}

注意:类的属性名称必须和请求参数名称一致





第二种:参数带注解



1.@RequestParam

如果设置了value,test方法中的参数名称就可以不与请求的参数名称保持一致,但如果没有设置value,那么test方法中的参数名称就必须与请求的参数名称保持一致。

required的值(boolean)来表示该参数是否必填,false表示非必填。

@RequestParam(defaultValue=xxx)可以设置参数默认值


@RequestMapping("/test")
public String test(@RequestParam String username){
    return null;
}

加了这个注解的好处是:

  • 当请求参数username不存在时会有异常发生(空指针异常),可以通过设置属性required=false解决

  • 方法参数名可以和前端请求参数名不一致

  • 当参数为空时,如果设置了参数默认值,会自动赋值为默认值


@RequestMapping("/test")
public String test(@RequestParam(value="username", required=false) String appName){
    return null;
}

@RequestMapping("/test")
public String test(@RequestParam(value="username",required=true,defaultValue="admin") String appName){
    return null;
}

【若"Content-Type"="application/x-www-form-urlencoded",post get都可以;若"Content-Type"="application/application/json",只适用get】




2.@PathVariable

路径变量,接收请求路径中占位符的值,参数与大括号里的名字一样要相同


RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
  //do something;
}

@PathVariable支持restful风格




3.@ModelAttribute

  @RequestMapping(value="/addUser5",method=RequestMethod.POST)
  public String addUser5(@ModelAttribute("user") UserModel user) {
    System.out.println("username is:"+user.getUsername());
    System.out.println("password is:"+user.getPassword());
    return "demo/index";
  }

@ModelAttribute解释:运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用

参考链接:@ModelAttribute运用详解




参考链接:

https://www.cnblogs.com/lcxdevelop/p/8309018.html

https://blog.csdn.net/weixin_41404773/article/details/80319083

https://blog.csdn.net/u013756192/article/details/79749415?spm=1001.2014.3001.5502

https://blog.csdn.net/JavaNotes/article/details/80722204



posted @   卡卡发  阅读(1610)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示