【SpringMVC】Controller注解及请求参数详解 |
您所在的位置:网站首页 › 控制器参数 › 【SpringMVC】Controller注解及请求参数详解 |
本文目录
Controller注解Controller 注解用法Controller 接收请求参数通过形参接收请求参数通过实体Bean 接收请求参数通过HttpServletRequst接收请求参数通过RequestParam注解接收请求参数通过PathVariable注解接收请求参数通过ModelAttribute注解接收请求参数修饰的方法有返回值修饰的方法没有返回值
Controller注解
在Spring中 Controller注解用于指示Spring类的实例是一个控制器,相对于实现Controller接口变得更加简单。而且实现Controller接口只能处理一个单一的请求,而是用@Controller注解可以支持同时处理多个请求动作,更加灵活。 @Controller用于标记一个类,使用他标记的类就是一个SpringMVC Controller对象,即一个控制器类,Spring使用扫描机制查找应用程序中所有基于注解的控制器类。分发处理器会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解的方法才是真正处理请求的处理器。 在使用Controller注解前,需要在Spring配置文件中打开注解扫描 Controller 注解用法在使用注解前,创建一个 SpringMVC工程:【SpringMVC】SpringMVC入门实例 @Controller public class LoginControl { @RequestMapping(value = "/index/login") public String login(){ return "login"; } }@Controller表示该类是一个控制器类,@RequestMapping注解用来映射一个请求,value="/index/login"表示请求由该注解下的login方法进行处理。 所以当请求’/index/login’的地址,可以转发到LoginControl的login()方法进行处理 前面的RequestMapping注解也可以加到Controller类上 ,如下所示,请求得到同样的结果 @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } } Controller 接收请求参数 通过形参接收请求参数首先在之前的工程(【SpringMVC】SpringMVC入门实例)上增加如下修改 增加success.jsp Title 添加成功在LoginControl中添加 add()方法,该方法增加两个参数age和name,该参数名称需要和表单input中name的名称一致。 @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @RequestMapping(value = "/add") public String add(int age,String name){ System.out.println("age:"+age+" name:"+name); return "success"; } }请求结果如下: 控制台打印了请求参数信息 在前面工程基础上新建实体类User public class User { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "age=" + age + ", name='" + name + '\'' + '}'; } }将LoginControl中 的add()方法参数修改如下: @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @RequestMapping(value = "/add") public String add(User user){ System.out.println("user:"+user ); return "success"; } }执行结果: 将LoginControl中 的add()方法参数修改如下: @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @RequestMapping(value = "/add") public String add(HttpServletRequest request){ System.out.println("request age:"+ request.getParameter("age") ); System.out.println("request name:"+ request.getParameter("name") ); return "success"; } }打印如下: RequestParam注解作用:把请求中的指定名称的参数传递给控制器中的形参赋值 注解属性 value:请求参数中的名称 required:请求参数中是否必须提供此参数,默认值是true,必须提供 将LoginControl中 的add()方法参数修改如下: @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @RequestMapping(value = "/add") public String add(@RequestParam(value="name",required=false)String username,@RequestParam(value="age",required=false)String age){ System.out.println("RequestParam age:"+ age); System.out.println("RequestParam name:"+ username ); return "success"; } }打印如下: PathVariable注解作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符 注解属性 value:指定url中的占位符名称 优点:Restful风格的URL 请求路径一样,可以根据不同的请求方式去执行后台的不同方法 在login.jsp中添加一个a标签 Title 名字: 年龄: PathVariable注解请求将LoginControl中 添加sayHello()方法: @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @RequestMapping(value = "/add") public String add(@RequestParam(value="name",required=false)String username,@RequestParam(value="age",required=false)String age){ System.out.println("RequestParam age:"+ age); System.out.println("RequestParam name:"+ username ); return "success"; } @RequestMapping(path="/hello/{id}") public String sayHello(@PathVariable(value="id") String id) { System.out.println("id="+id); return "success"; } }ModelAttribute注解作用 出现在方法上:表示当前方法会在控制器方法执行前线执行。出现在参数上:获取指定的数据给参数赋值。 修饰的方法有返回值给User中添加一个id属性,再到UserController中添加一个parameterUser()方法,给user添加id, 在add方法中user已经被上面的parameterUser先执行了修改,已经给id赋值 @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @ModelAttribute public User parameterUser(){ User user = new User(); user.setId(1); return user; } @RequestMapping(value = "/add") public String add(User user){ System.out.println("user :"+ user); return "success"; } }
在上面案例基础上,把parameterUser的返回值去掉,增加一个Map来存储数据,存储的key为user,在add方法中使用@ModelAttribute(“user”)User user获取在parameterUser()方法中赋值的数据。程序运行后,add方法的user参数能取到parameterUser方法赋值的数据。 执行结果同上 @Controller @RequestMapping("/index") public class LoginControl { @RequestMapping(value = "/login") public String login(){ return "login"; } @ModelAttribute public void parameterUser(Map userMap){ User user = new User(); user.setId(2); userMap.put("user",user); } @RequestMapping(value = "/add") public String add(@ModelAttribute("user")User user){ System.out.println("user :"+ user); return "success"; } } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |