引言
在现代的Web开发中,SpringMVC已经成为了一个非常流行和强大的框架。它提供了许多注解来简化开发过程,使得我们能够更加专注于业务逻辑的实现。本文将深入探讨SpringMVC的注解驱动开发,重点关注常用注解、参数传递、返回值和页面跳转等方面。
1. SpringMVC的常用注解
1.1 @Controller
@Controller注解用于标识一个类是SpringMVC的控制器,它能够处理用户请求并返回相应的结果。我们可以通过在方法上使用@RequestMapping注解来指定请求的URL路径。
1.2 @RequestMapping
@RequestMapping注解用于将请求URL映射到相应的处理方法上。我们可以通过指定URL路径、请求方法、请求参数等来精确匹配请求。
1.3 @RequestParam
@RequestParam注解用于获取请求参数的值。我们可以通过指定参数名、是否必需、默认值等来获取请求中的参数值。
1.4 @PathVariable
@PathVariable注解用于获取URL路径中的参数值。我们可以通过在URL路径中使用占位符来指定参数名,并在方法参数中使用@PathVariable注解来获取参数值。
1.5 @ResponseBody
@ResponseBody注解用于将方法的返回值直接作为响应体返回给客户端。它可以将对象转换为JSON、XML等格式,并设置响应的Content-Type。
1.6.@RequestHeader
使用 @RequestHeader 注解可以获取指定的请求头信息。如果想要获取所有的请求头信息,可以使用 Map<String,String>、MultiValueMap<String,String>、HttpHeaders 这三个 Map 中的任何一个封装所有请求头的 name 和 value。
参数列表
参数 | 说明 |
name | name 和 value 互为别名,当只有一个参数时,可以省略 value,直接(“xxx”) 就可以了 |
value | name 和 value 互为别名,当只有一个参数时,可以省略 value,直接(“xxx”) 就可以了 |
required | 默认情况下,如果请求头中缺少了指定的 name,那么将会报错。 如果没有添加required = false,当请求头中没有这个zking请求头时就会报错。 |
defaultValue | 如果请求头中缺少了指定的 name ,那么会报错,可以使用 defaultValue 这个属性指定默认值,就可以避免报错 ;如果请求头缺少指定 name ,该属性设置的值将会作为默认值,如果该属性不设置值,它有自己的默认值 DEFAULT_NONE |
2. SpringMVC的参数传递
2.1.基础类型+String
@RequestMapping("/h1") public String h1(String bname,Integer bid){ log.info("基础类型+String传参:{},{}",bname,bid); return "index"; } • 1 • 2 • 3 • 4 • 5
2.2.复杂类型
@RequestMapping("/h2") public String toHello2(Book book, HttpServletRequest req){ log.info("复杂类型传参:{},{}", req.getParameter("bid"),req.getParameter("bname")); log.info("复杂类型传参:{}",book.toString()); return "index"; } • 1 • 2 • 3 • 4 • 5 • 6
2.3.@RequestParam
@RequestMapping("/h3") public String h3(@RequestParam Integer bid, @RequestParam(required = false) String bname){ log.info(" 使用@RequestParam注解传递参数:{},{}", bid,bname); return "index"; } • 1 • 2 • 3 • 4 • 5
2.4.@PathVariable
@RequestMapping("/h4/{bid}") public String h4(@PathVariable("bid") Integer bid){ log.info(" 使用@PathVariable注解传递参数:{},", bid); return "index"; } • 1 • 2 • 3 • 4 • 5
2.5.@RequestBody
// 能接受json数据,前提导入了Jackson依赖,没有导入Jackson依赖的话那进不了这个方法 @RequestMapping("/h5") public String h5(@RequestBody Map map){ log.info("RequestBody:map:{}",map); return "index"; } // 不能接受json数据 @RequestMapping("/h6") public String h6( Map map){ log.info("RequestBody:map:{}",map); return "index"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13
2.6.@RequestHeader
@RequestMapping("/h7") public String h7(Book book, @RequestBody Map map, @RequestHeader("jwt") String jwt){ log.info("book:{}",book); log.info("RequestBody:map:{}",map); log.info("RequestHeader:jwt:{}",jwt); return "index"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7
3. SpringMVC的返回值
3.1 void返回
public void f1(HttpServletResponse response) throws Exception { Map<String,Object> map = new HashMap<>(); map.put("code",200); map.put("msg","成功"); try { } catch (Exception e) { ResponseUtil.writeJson(response,map); e.printStackTrace(); } } @ResponseBody @RequestMapping("/f2") public Map f2(HttpServletResponse resvponse) { Map<String,Object> map = new HashMap<>(); map.put("code",200); map.put("msg","成功"); return map; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 • 16 • 17 • 18 • 19 • 20 • 21
3.2 String返回
@RequestMapping("/index") public String demo1(){ System.out.println("hello spring"); return "index"; } • 1 • 2 • 3 • 4 • 5
3.3.String+Model返回
@RequestMapping("/f3") public String f3(Model model, HttpServletRequest request){ //填充模型数据 model.addAttribute("name","张三"); request.setAttribute("role","管理员"); //逻辑视图名 return "index"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8
<%-- Created by IntelliJ IDEA. User: yuanh Date: 2023/9/4 Time: 17:04 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> hello word name:${name} role:${role} </body> </html> • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14 • 15 • 16 • 17 • 18 • 19 • 20
3.4.ModelAndView
@RequestMapping("/f4") public ModelAndView f4(){ ModelAndView mv = new ModelAndView(); //填充模型数据 mv.addObject("price","19.9"); mv.setViewName("index"); //逻辑视图名 return mv; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10
4. SpringMVC页面跳转
4.1 重定向
@RequestMapping("/z3") public String z3(){ System.out.println("z3"); return "redirect:h1"; } @RequestMapping("/z4") public String z4(){ System.out.println("z4"); return "redirect:/main/index"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12
4.2 转发
@RequestMapping("/z1") public String z1(){ System.out.println("z1"); return "forward:h1"; } @RequestMapping("/z2") public String z2(){ System.out.println("z2"); return "forward:/main/index"; } • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12
总结
本文深入探讨了SpringMVC的注解驱动开发,重点关注了常用注解、参数传递、返回值和页面跳转等方面。通过学习和理解这些内容,我们可以更加灵活和高效地使用SpringMVC来开发Web应用程序。希望本文对您有所帮助!