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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!