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

简介: “深入理解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<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应用程序。希望本文对您有所帮助!


相关文章
|
前端开发 Java 编译器
学会SpringMVC之自定义注解各种场景应用,提高开发效率及代码质量
学会SpringMVC之自定义注解各种场景应用,提高开发效率及代码质量
71 0
|
SQL JSON 前端开发
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十二)
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十二)
86 0
|
JSON 前端开发 Java
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十一)
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十一)
90 0
|
前端开发 JavaScript Java
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十)
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十)
82 0
|
SQL JSON 前端开发
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发
本文章的目标 完成对数据库中表的一条记录进行修改 MySql的Sql语句: UPDATE `demossmtest`.`orders` SET `name` = '电脑AS', `foondname` = '华为OS', `ordertime` = '2022.6.9', `count` = 3456, `price` = 3452.09, `amount` = 1234.09 WHERE `id` = 6
|
Java Spring 容器
SpringMVC注解开发入门案例
SpringMVC注解开发入门案例
|
前端开发 Java Maven
SpringMVC使用注解开发
SpringMVC使用注解开发
|
开发框架 前端开发 安全
Spring全家通之SpringMVC如何使用注解开发。
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架。
Spring全家通之SpringMVC如何使用注解开发。
|
Web App开发 XML 前端开发
SSM-SpringMVC-14:SpringMVC中大话注解式开发基础--呕心沥血版
 ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     注解的基础我不再多啰嗦,百度一搜很多,很详细啊,我就讲一下SpringMVC中的注解入门 通过注解的方式定义一个处理器,它的命名空间,以及他们的方法访问路径,     @Conto...
1140 0
SSM-SpringMVC-15:SpringMVC中小论注解式开发之通配符篇
 ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------   此处改了下标题,小论,为什么不说大话了呢?哎,质量不够啊,通配符篇提取不出更多可以讲的滔滔不绝的套路 通配符,好熟悉啊?这里的通配符怎么用   首先:   *这个一般代表0~多次,不难理解吧?   接上篇内容来   1.
1268 0