SpringMVC 学习(三)之 @RequestMapping 注解

2024-02-25 17:44

本文主要是介绍SpringMVC 学习(三)之 @RequestMapping 注解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 @RequestMapping 注解介绍

2 @RequestMapping 注解的位置

3 @RequestMapping 注解的 value 属性

4 @RequestMapping 注解的 method 属性

5 @RequestMapping 注解的 params 属性(了解)

6 @RequestMapping 注解的 headers 属性(了解)

7 @RequestMapping 注解的 produces 属性(了解)

8 @RequestMapping 注解的 consumes 属性(了解)

9 SpringMVC 支持 ant 风格的路径

10 SpringMVC 支持路径中的占位符(重点)


1 @RequestMapping 注解介绍

        @RequestMapping 注解作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。它主要有六种属性,分别是 value、method、header、params、produces、consumes。这六种属性之间是与的关系,联合使用会使请求地址的映射更加精确。

  • value:指定请求路径
  • method:指定请求方法
  • header:指定请求头信息
  • params:指定请求参数
  • produces:指定返回的媒体类型
  • consumes:指定处理的媒体类型

2 @RequestMapping 注解的位置

@RequestMapping 注解可以放在方法或类的上方,以指定请求的路径和其他相关的信息。

  • 放在处理请求的方法上,设置映射请求的请求路径的具体信息
@RequestMapping("/path")
public String handleRequest(HttpServletRequest request, HttpServletResponse response) {// 处理请求的逻辑return "success";
}

上述代码中,收到请求路径为 /path 的请求,会调用 handleRequest 方法处理

  • 放在控制器类上,设置映射请求的请求路径的初始信息
@Controller
@RequestMapping("/api")
public class MyController {@RequestMapping("/users")public String handleUsersRequest(HttpServletRequest request, HttpServletResponse response) {// 处理用户请求的逻辑return "success";}
}

上述代码中,/api 是请求路径的初始信息,/users 是请求路径的具体信息,只有收到请求路径为 /api/users 的请求,才会调用 MyController 控制器中的 handleUsersRequest 方法。

3 @RequestMapping 注解的 value 属性

        @RequestMapping 注解的 value 属性通过请求地址匹配请求映射,是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址所对应的请求,一般而言,必须设置 value,配合其它属性使映射更精确。

jsp
<a href="${pageContext.request.contextPath}/login/test1">请求路径: /login/test1</a><br/>
<a href="${pageContext.request.contextPath}/login/test2">请求路径: /login/test2</a>控制器
@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/test1")public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(value = {"test2", "/test3"})public String handler2() {System.out.println("处理器2");return "success";}
}

4 @RequestMapping 注解的 method 属性

        @RequestMapping 注解的 method 属性通过请求的请求方式匹配请求映射,是一个 RequestMethod 类型的数组,表示该请求映射能够匹配多种请求方式的请求。若当前请求的请求地址满足请求映射的 value 属性,但是请求方式不满足 method 属性,则浏览器报错 405:Request method 'POST' not supported。

        常用的请求方式有 GET、POST、PUT、DELETE,但是目前的浏览器只支持 GET、POST 请求方法,若要发送 PUT 和 DELETE 请求,则需要通过 Spring 提供的过滤器 HiddenHttpMethodFilter。

对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

  • 处理 GET 请求的映射 --> @GetMapping
  • 处理 POST 请求的映射 --> @PostMapping
  • 处理 PUT 请求的映射 --> @PutMapping
  • 处理 DELETE 请求的映射 --> @DeleteMapping
<a href="${pageContext.request.contextPath}/login/test1">请求路径: /login/test1</a><br/>
<a href="${pageContext.request.contextPath}/login/test2">请求路径: /login/test2</a>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/test1", method = {RequestMethod.POST})public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(value = {"test2", "/test3"}, method = {RequestMethod.GET})public String handler2() {System.out.println("处理器2");return "success";}
}

5 @RequestMapping 注解的 params 属性(了解)

        @RequestMapping注解的 params 属性通过请求参数匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系。注意,请求参数不要空格,空格也是一个字符。

  • "param":要求请求映射所匹配的请求必须携带 param 请求参数
  • "!param":要求请求映射所匹配的请求必须不能携带 param 请求参数
  • "param=value":要求请求映射所匹配的请求必须携带 param 请求参数且 param=value
  • "param!=value":要求请求映射所匹配的请求必须携带 param 请求参数但是 param!=value
<a href="${pageContext.request.contextPath}/login/test1?username=西施&password=123">请求路径: /login/test1?username=西施&password=123</a><br/>
<a href="${pageContext.request.contextPath}/login/test2?username=赵飞燕&password=111">请求路径: /login/test2?username=赵飞燕&password=111</a><br/>
<a href="${pageContext.request.contextPath}/login/test2?password=111">请求路径: /login/test2?password=111</a>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(// 请求路径只能为 /test1value = "/test1",// 请求方法既可以是 GET 方法,也可以是 POST 方法method = {RequestMethod.GET, RequestMethod.POST},// 请求路径不能必须包含 username 参数,参数 password 必须为 123params = {"username", "password=123"})public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(// 请求路径既可以为 /test2,也可以为 /test3value = {"/test2", "/test3"},// 请求方法必须是 GET 方法method = {RequestMethod.GET},// 请求路径中不能包含 username 参数,参数 password 不能为 123params = {"!username", "password!=123"})public String handler2() {System.out.println("处理器2");return "success";}
}

测试结果

请求路径包含参数 username,且 password 要为 123,则成功访问

请求路径不能包含参数 username,且 password 要为 111,否则,访问失败

6 @RequestMapping 注解的 headers 属性(了解)

        @RequestMapping 注解的 headers 属性通过请求头信息匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系。和 params 属性用法一致。

  • "header":要求请求映射所匹配的请求必须携带 header 请求头信息
  • "!header":要求请求映射所匹配的请求必须不能携带 header 请求头信息
  • "header=value":要求请求映射所匹配的请求必须携带 header 请求头信息且 header=value
  • "header!=value":要求请求映射所匹配的请求必须携带 header 请求头信息且 header!=value

7 @RequestMapping 注解的 produces 属性(了解)

        @RequestMapping 注解的 produces 属性通过返回的媒体类型即请求头 Accept 中的媒体类型)匹配请求映射,是一个字符串类型的数组常用的媒体类型有以下几种:

  • text/plain:纯文本内容,例如 HTML、XML、CSS 等
  • image/jpeg:JPEG 图像
  • image/png:PNG 图像
  • audio/mpeg:MPEG 音频
  • video/mp4:MP4 视频
  • application/pdf:PDF 文件
  • application/msword:Microsoft Word 文档
  • application/vnd.ms-excel:Microsoft Excel 文档
  • application/x-www-form-urlencoded:URL 编码的表单数据
  • application/vnd.openxmlformats-officedocument.wordprocessingml.document:OpenXML 格式的 Word 文档
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:OpenXML 格式的 Excel 文档

注:

  • Content-Type: 告诉服务器当前发送的数据是什么格式
  • Accept : 用来告诉服务器,客户端能接收哪些格式,最好返回这些格式

8 @RequestMapping 注解的 consumes 属性(了解)

        @RequestMapping 注解的 consumes 属性通过处理的媒体类型即请求头 Content-Type 中的媒体类型,一般而言,POST 方法的请求头有 Content-Type,而 GET 方法的请求头没有 Content-Type)匹配请求映射,是一个字符串类型的数组。

<form action="${pageContext.request.contextPath}/login/test1" method="post">用户名: <input type="text" name="username"/> <br>密 码: <input type="password" name="password"/> <br><input type="submit" />
</form>test2">请求路径: /login/test2</a><br/>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(// 请求路径只能为 /test1value = "/test1",// 请求路径请求头中的 Context-Type 只能为 application/x-www-form-urlencodedconsumes = {"application/x-www-form-urlencoded"})public String handler1(HttpServletRequest request) throws IOException {System.out.println("处理器1");System.out.println("Content-Type:" + request.getContentType());return "success";}
}

9 SpringMVC 支持 ant 风格的路径

  • ?:表示任意的一个字符
  • *:表示任意的 0 ~ n 个字符
  • **:表示任意的一层或多层目录,只能是 /**/xxx 的格式
<a href="${pageContext.request.contextPath}/xx/login/test1">请求路径: /xx/login/test1</a><br/>
<a href="${pageContext.request.contextPath}/xx/login/test2">请求路径: /xx/login/test2</a><br/>@Controller
@RequestMapping("/**/login")
public class MyController {@RequestMapping(value = "/?est1")public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(value = "/te*")public String handler2() {System.out.println("处理器2");return "success";}
}

10 SpringMVC 支持路径中的占位符(重点)

        当请求将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping 注解的 value 属性中通过占位符 {xxx} 表示传输的数据再通过 @PathVariable 注解,将占位符所表示的数据赋值给控制器方法的形参。

<a href="${pageContext.request.contextPath}/login/test1/西施/123"> 请求路径: /login/test1/西施/123 </a><br/>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/?est1/{username}/{password}")public String handler1(@PathVariable("username") String username,@PathVariable("password") String password) {System.out.println("处理器1");System.out.println("username:" + username + " password:" + password);return "success";}
}

通过请求路径的方式将“西施”和“123”两个值传递给处理器

这篇关于SpringMVC 学习(三)之 @RequestMapping 注解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746214

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06