笔记 笔记
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

EasT-Duan

Java 开发
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

购买兑换码请添加

添加时候请写好备注,否则无法通过。

  • Maven

  • Bootstrap

  • Spring

  • Spring MVC

    • 什么是三层架构
    • MVC 模式
    • Spring MVC 简介
    • Spring MVC 架构
    • Spring 整合 Spring MVC
    • 第一个 Controller 控制器
    • Spring MVC 注解说明
      • 控制器相关的注解
      • 数据绑定相关的注解
      • 视图相关的注解
      • 其他注解
        • @RequestHeader
        • @CookieValue
    • 第一个 Spring MVC 拦截器
  • MyBatis

  • JUnit

  • GitFlow 工作流指南

  • SpringBoot

  • Reactor

  • 微服务

  • Java Web
  • Spring MVC
EasT-Duan
2023-06-12
目录

Spring MVC 注解说明

欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。

# Spring MVC 注解说明

Spring MVC 中的注解一般分为三类:

  1. 控制器相关的注解
  2. 数据绑定相关的注解
  3. 视图相关的注解

下面分别介绍每个注解的详细说明:

# 控制器相关的注解

  1. @Controller

    用于标识一个类为 Spring MVC 的控制器类。

  2. @RequestMapping ☆☆☆☆☆

    用于标识一个方法或类的 URL 请求映射,可以用于类和方法级别上。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("/list")
        public String userList(Model model){
            return "user/list";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    上面的代码中,@RequestMapping ("/user") 标记了 UserController 类所处理的请求的父级 URL,@RequestMapping ("/list") 标记了 userList () 方法所处理的请求的具体 URL,当请求 /user/list 时,UserController 的 userList () 方法将被调用。

    属性说明

    @RequestMapping 注解有很多属性,用于设置如何映射请求 URL 和请求方法,以下是一些常用的属性:

    1. value 或 path: 请求映射的路径,可以用一个字符串或一个字符串数组来表示,比如 @RequestMapping("/users") 或者 @RequestMapping({"/users", "/customers"}) 。

    2. method: HTTP 方法的类型,可设置一个或多个,比如 @RequestMapping(value = "/users", method = RequestMethod.GET) 。

    3. params: 请求参数的限制,通过表达式来实现,可以限定请求的参数名、值以及消费类型和生产类型。比如 @RequestMapping(value = "/users", method = RequestMethod.GET, params = "id=1") 就表示请求参数中必须包含 "id=1" 这种形式的参数限制,否则将拒绝请求。

    4. headers: 请求头的限制,可以通过表达式来实现,比如 @RequestMapping(value = "/users", method = RequestMethod.GET, headers = "Accept=text/html") 表示只接受响应类型为 "text/html" 的请求。

    5. consumes: 请求数据类型限制,表示该请求映射方法能够接受的媒体类型。比如 @RequestMapping(value = "/users", method = RequestMethod.POST, consumes = "application/json") 表示该方法只接受请求数据类型为 "application/json" 的 POST 请求。

    6. produces: 返回值类型限制,表示该请求映射方法能够生产的媒体类型。比如 @RequestMapping(value = "/users/{id}", method = RequestMethod.GET, produces = "application/json") 表示该方法只能返回 "application/json" 类型的响应。

    7. params 和 headers 中的表达式:使用 SpEL(Spring Expression Language)来实现的。比如 @RequestMapping(value = "/users", method = RequestMethod.GET, params = "id={^[0-9]*$}") 表示只接受参数 "id" 值为数字的请求。

    需要注意的是,以上属性可以组合使用来实现更复杂的请求映射。另外,在处理器方法中使用 @RequestMapping 注解时,可以将该注解放在类级别上,表示对类中的所有请求方法都有效,在方法级别上设置的注解会覆盖类级别上的注解。如果不指定请求方法类型,则默认支持所有的 HTTP 请求方法。

  3. @GetMapping 和 @PostMapping

    @GetMapping 和 @PostMapping 分别用于标记一个方法为 GET 请求和 POST 请求方法,它们是 @RequestMapping 的简化版,其余属性与 @RequestMapping 一致。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @GetMapping("/list")
        public String userList(Model model){
            return "user/list";
        }
        @PostMapping("/save")
        public String saveUser(Model model){
            // 保存用户
            return "redirect:/user/list";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
  4. @PathVariable

    用于在 URL 中获取路径变量的值。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("/{id}")
        public String viewUser(@PathVariable("id") Long id, Model model){
            User user = userService.findById(id);
            model.addAttribute("user", user);
            return "user/view";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  5. @RequestParam

    用于从查询字符串中获取参数值。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @GetMapping("/list")
        public String userList(@RequestParam("page") int page, @RequestParam("size") int size, Model model){
            int count = userService.count();
            List<User> users = userService.find(page, size);
            model.addAttribute("users", users);
            model.addAttribute("count", count);
            return "user/list";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

# 数据绑定相关的注解

  1. @ModelAttribute

    用于将请求参数绑定到模型数据中。比如:Get 接收的参数正好是对象中的一些属性,就可以用这个注解

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @PostMapping("/add")
        public String addUser(@ModelAttribute User user){
            userService.save(user);
            return "redirect:/user/list";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  2. @RequestBody

    用于将请求正文绑定到方法参数上。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @PostMapping("/add")
        public String addUser(@RequestBody User user){
            userService.save(user);
            return "redirect:/user/list";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

# 视图相关的注解

  1. @ResponseBody

    用于将方法返回的对象转换为指定格式的响应数据。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @GetMapping("/{id}")
        @ResponseBody
        public User getUser(@PathVariable("id") Long id){
            return userService.findById(id);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    当请求 /user/1 时,将返回一个 JSON 格式的 User 对象。

  2. @ResponseStatus

    用于指定响应状态码。比如:

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @DeleteMapping("/{id}")
        @ResponseStatus(HttpStatus.NO_CONTENT)
        public void deleteUser(@PathVariable("id") Long id){
            userService.deleteById(id);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    当请求 /user/1 并使用 DELETE 方法时,将返回状态码为 204 No Content,表示删除成功。

以上是一些常用的 Spring MVC 注解,还有一些其他的注解以及注解的属性可以根据具体的业务需求进行使用和配置。

# 其他注解

# @RequestHeader

作用:用于获取请求消息头。

属性:

  • value:提供消息头名称
  • required:是否必须有此消息头
/**
* RequestHeader 注解
* @param user
* @return
*/
@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value="Accept-Language", required=false)String requestHeader){
    System.out.println(requestHeader);
    return "success";
}

1
2
3
4
5
6
7
8
9
10
11

# @CookieValue

作用:用于把指定 cookie 名称的值传入控制器方法参数。
属性:

  • value:指定 cookie 的名称。
  • required:是否必须有此 cookie。
/**
* Cookie 注解注解
* @param user
* @return
*/
@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value="JSESSIONID",required=false)String cookieValue){
    System.out.println(cookieValue);
    return "success";
}

1
2
3
4
5
6
7
8
9
10
11
#Spring Mvc
上次更新: 2025/04/12, 05:37:39
第一个 Controller 控制器
第一个 Spring MVC 拦截器

← 第一个 Controller 控制器 第一个 Spring MVC 拦截器→

最近更新
01
Reactor 核心
02-24
02
前置条件
10-30
03
计算机网络
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2025 powered by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式