• “深入理解SpringMVC的注解驱动开发“



    在这里插入图片描述

    引言

    在现代的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、MultiValueMap、HttpHeaders 这三个 Map 中的任何一个封装所有请求头的 name 和 value。

    参数列表

    参数说明
    namename 和 value 互为别名,当只有一个参数时,可以省略 value,直接(“xxx”) 就可以了
    valuename 和 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>Titletitle>
    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应用程序。希望本文对您有所帮助!

  • 相关阅读:
    公网ip和私网ip的区别
    中科创达怎么样-是外包公司吗-智能网联汽车和智能物联网推动业务快速增长
    ARM裸机
    MySQL的事务和存储引擎
    SpringBoot基本介绍
    浅浅研究模板字符串 ` `
    看到那些自以为是,却实际上很愚蠢的家长。
    两轮市场红海,利尔达芯智行如何乘风破浪?
    腾讯云GPU云服务器计算型和渲染型分别适用于哪些场景?
    07.操作符
  • 原文地址:https://blog.csdn.net/2201_75869073/article/details/132688739