SpringBoot Web开发设置请求映射规则

news/2024/4/30 15:04:24/文章来源:https://blog.csdn.net/m0_73311735/article/details/127208191

前言

本篇文章介绍 SpringBoot Web 开发中的请求映射注解的详细使用,希望观众老爷们多多支持,欢迎在评论区批评指正!

设置请求映射规则通过 @RequestMapping注解,该注解标注在类或者方法上;

该注解用来设定所能匹配请求的要求。只有符合了设置的要求,请求才能被该注解标注的方法或类处理。

1. 指定请求路径

@RequestMapping注解的默认属性 value,或者属性 path都可以用来指定请求路径。

例如我们当前端发送请求时,请求路径为 /user/login,那么就可以对此请求处理的 controller层类的方法上,通过 @RequestMapping注解,指定请求路径。

@Controller
public class UserController {@RequestMapping("/user/login")public void login(){}}
复制代码

通常一个 controller层的具体类,用于一个方面的全部请求的处理,如用户请求处理、管理员请求处理等。那么我们可以这样做:将@RequestMapping注解标注在类上,使这个 controller类,只处理针对用户的请求;在具体的请求方法上标注 @RequestMapping注解,指定具体路径,如登录、获取用户信息等。

@Controller
@RequestMapping('/user/')
public class UserController {@RequestMapping("/info")public void getUserInfo(){}}
复制代码

注意

我们观察到 value/path属性是一个 String数组,也就是说我们可以为一个方法指定多个请求路径。

2. 指定请求方式

@RequestMapping注解的 method属性,用于指定请求的方式,有以下几种请求方式:默认方式为 GET

比如,前端发送的请求方式为 POST,那么我们就需要通过 method属性指定请求方式了。

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/login", method = RequestMethod.POST)public void login(){}}
复制代码

RequestMethod枚举类,是请求方式的枚举。

更快的指定请求方式

如果想要更快的指定请求方式,那么我们可以使用以下注解:

  • @GetMapping注解
  • @PostMapping注解
  • @DeleteMapping注解
  • @PutMapping注解

例如 @PostMapping注解等价于 @RequestMapping(method = RequestMethod.POST)

注意

我们观察到 method属性是一个 RequestMethod数组,也就是说我们可以为一个方法指定多种请求方式。

3. 指定请求参数

@RequestMapping注解的 params属性(类型为 String[]),用于指定请求参数。我们可以对请求参数进行一些限制,如必须具有某些参数,或者某些参数必须为某个值,或者某个参数必须不为某个值。

比如我们期望一个 GET请求必须携带参数 code被请求方法处理:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , params = "code")public String hello(){return "Hello SpringBoot";}
}
复制代码

不能携带 code参数:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , params = "!code")public String hello(){return "Hello SpringBoot";}
}
复制代码

必须携带这个 code参数,且 code参数值必须为某个值:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , params = "code=0000")public String hello(){return "Hello SpringBoot";}
}
复制代码

必须携带这个 code参数,且 code参数不能为某个值:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , params = "code!=0000")public String hello(){return "Hello SpringBoot";}
}
复制代码

当然我们也可以指定必须携带多个请求参数,如:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/login", method = RequestMethod.POST, params = {"username", "password"})public void login(){}}
复制代码

4. 指定请求头

@RequestMapping注解的 headers属性(类型为 String[]),用于对请求头进行一些限制。

比如我们期望一个 GET请求,必须携带请求头 deviceType才能被请求方法处理:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , headers = "deviceType")public String hello(){return "Hello SpringBoot";}}
复制代码

不能携带请求头 deviceType才能被请求方法处理:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , headers = "!deviceType")public String hello(){return "Hello SpringBoot";}}
复制代码

必须携带请求头 deviceType,且请求头 deviceType必须为某个值:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , headers = "deviceType=ios")public String hello(){return "Hello SpringBoot";}}
复制代码

必须携带请求头 deviceType,且请求头 deviceType不能为某个值:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , headers = "deviceType!=ios")public String hello(){return "Hello SpringBoot";}}
复制代码

当然我们也可以指定必须携带多个请求头参数,如:

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value = "/hello" , headers = {"deviceType","deviceSize"})public String hello(){return "Hello SpringBoot";}}
复制代码

5. 对请求头 Content-Type 进行限制

@RequestMapping注解的 consumes属性(类型为 String[]),用于对请求头(Content-Type)进行一些限制。

如前端发送一个 POST请求,并且请求头的 Content-Type必须为 multipart/from-data的请求,才能被请求方法处理:

@Controller
@RequestMapping("/user/")
public class HelloController {@PostMapping(value = "/upload", consumes = "multipart/from-data")public void file(){}}
复制代码

请求头的 Content-Type不能为 multipart/from-data的请求,才能被请求方法处理:

@Controller
@RequestMapping("/user/")
public class HelloController {@PostMapping(value = "/upload", consumes = "!multipart/from-data")public void file(){}}
复制代码

6. 设置数据的返回类型和编码

@RequestMapping注解的 produces属性(类型为 String[]),可以对请求处理的数据返回类型和编码进行限制。

  1. 如指定数据返回格式为 json,编码为 utf8,访问这个接口:
@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value="/hi",produces = {"application/json;charset=UTF-8"})@ResponseBodypublic String hello(){List<String> list = new ArrayList<>();list.add("hi");return list;}}
复制代码

但是一般不需要这样做,当方法标注了 @ResponseBody默认会返回 json的数据,因为 spring-boot-starter-web包含了 jackson依赖,会将 java对象自动转换为 json

@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping("/hi")@ResponseBodypublic List<String> hello(){List<String> list = new ArrayList<>();list.add("hi");return list;}
}
复制代码

返回的 json数据

  1. 如指定数据返回格式为 xml,编码为 uft8时,我们需要在 pom.xml中引入 jackson xml 依赖,就能返回 xml格式的数据了。
<dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-xml-provider</artifactId>
</dependency>
复制代码
@Controller
@RequestMapping("/user/")
public class HelloController {@RequestMapping(value="/hi",produces = {"application/xml;charset=UTF-8"})@ResponseBodypublic String hello(){List<String> list = new ArrayList<>();list.add("hi");return list;}}
复制代码

注意

使用@RequestMapping注解的 produces属性必须要和 @ResponseBody注解一起使用才可以,不加@ResponseBody注解相当于返回模板文件地址(SpringBoot默认),那样就出错了

produces属性的好处:一个是浏览器查看方便(json自动格式化,带搜索),另一个可以防止中文乱码,或者你需要返回 xml格式的时候有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_20227.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺序查找和二分查找

案例1):1 #include <stdio.h>2 3 int seqSearch(int arr[], int arrLen, int val){ //定义一个数组,一个数组长度,目标值4 for (int i = 0; i < arrLen; i++){5 if(arr[i] == val){6 return i;7 }8 }9 return -1; //找…

Java8 函数式编程

文章目录Java 函数式编程1. Lambda 表达式1.1 标准格式1.2 使用前提1.2.1 一个参数1.2.2 多个参数1.2.3 有返回值1.3 省略简化1.4 函数式接口1.4.1 Supplier1.4.2 Consumer1.4.3 Predicate1.4.4 Function1.5 方法引用1.5.1 对象 :: 实例方法1.5.2 类 :: 静态方法1.5.3 类 :: 实…

期货价格怎么算出来的?

期货价格怎么算出来的&#xff1f; 期货价格现货价格融资成本 如果对应资产是一个支付现金股息的股票组合&#xff0c;那么购买期货合约的一方因没有马上持有这个股票组合而没有收到股息。相反&#xff0c;合约卖方因持有对应股票组合收到了股息&#xff0c;因而减少了其持仓成…

数据结构-泛型(Java)

文章目录一、什么是泛型&#xff1f;1、非泛型2、泛型3、泛型的使用 泛型类 泛型接口 泛型方法二、泛型类1、 泛型类 正确使用分析 错误使用分析2、泛型类实现抽奖器3、泛型类派生子类 泛型类派生子类第一种第二种 非泛型三、泛型接口第一种&#xff1a;泛型类实现泛型接口第二…

使用python的pygame做的小游戏项目:小船打鱼

python小游戏项目&#xff1a;小船打鱼成果展示代码解析go_fishing.pygame_function.pygame_stats.pyscoreboard.pyalien.pysettings.pyship.pybullet.pybutton.py存在的问题代码都在这里&#xff0c;只需要创建好项目&#xff0c;将对应的代码保存在对应文件名的文件中即可&am…

【微搭低代码】Javascript基础知识-函数及模块介绍

低代码要想入门&#xff0c;首先需要学习javascript&#xff0c;我们已经有了两篇基础文章 变量定义及初始化 循环及条件控制 我们本篇介绍两个知识点&#xff0c;一个是函数&#xff0c;一个是模块 函数 在js中函数是可以重复使用的代码块&#xff0c;定义函数是为了去除冗余…

在Windows下自制ARM交叉编译工具链

参考链接&#xff1a;gnu工具链 1.Download MinGW and MSys packages. 安装MSys 参考此链接https://www.msys2.org/安装&#xff0c;注意只需要安装即可。 安装开发环境,设置镜像,需要进入安装路径中的/etc/pacman.d/进行修改 // /etc/pacman.d/mirrorlist.mingw32 Serve…

【5G RRC】5G 切换(handover)那点事儿

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

python去图片背景

Remove Image Background using Python https://youtu.be/RkdFkhfMK2k

跨境电商必读,WhatsApp营销入门指南!

关键词&#xff1a;WhatsApp营销、跨境电商营销 现在&#xff0c;跨境社交媒体和Messengers不仅仅是私人交流的渠道了。很多跨境电商已经找到了在WhatsApp营销的秘诀&#xff0c;如果你还没开始&#xff0c;你可能已经落后了。同时&#xff0c;与其他平台相比&#xff0c;在 W…

Vue组件-卡片动画倒计时

前言 最近有朋友在做投票的项目&#xff0c;里面有用到一个倒计时的组件&#xff0c;还想要个动画效果。cv大法浸染多年的我&#xff0c;首先想到的是直接找个现有的组件。 通过一通搜索&#xff0c;看上的只有一个 vue2-flip-countdown&#xff0c;但是当我要修改大小和颜色…

(附源码)计算机毕业设计SSM游乐园娱乐项目管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Github的使用教程

文章目录注册查找仓库下载代码fork仓库管理创建仓库添加文件提交issue提交/接受PRpages一直想进入工程这块领地&#xff0c;但是好像没咋学过github&#xff0c;今天学一下&#xff0c;先上个名词解释 注册 首先&#xff0c;github其实是不需要邮箱和手机号的&#xff0c;可以…

window11下安装.framework3.5的方法

window11下安装.framework3.5的方法 如果正常安装报错了&#xff0c;可采用如下方法重新安装 一、把安装iso文件 zh-cn_windows_11_business_editions_version_22h2_updated_sep_2022_x64_dvd_515a832b.iso 装载到虚拟盘中H:\sources\sxs\中的文件拷贝到硬盘已存在的盘符F:\w…

容器适配器——stack/queue/priority_queue

目录 一. stack 二. queue 三. priority_queue 1. empty()&#xff0c;top()&#xff0c;size()的实现 2. pop和push的实现 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转…

C语言:数组参数、指针参数

目录 一.字符指针&#xff0c;指针数组&#xff0c;数组指针简单回顾 二.数组参数、指针参数 一维数组传参 二维数组传参 这里需要注意&#xff1a; 一级指针传参 思考 二级指针传参 思考 一.字符指针&#xff0c;指针数组&#xff0c;数组指针简单回顾 #include<std…

java虚拟机中的双亲委派机制

文章目录双亲委派机制工作原理工作场景调用过程三种加载器调用范围String类加载过程StringTest类加载过程双亲委派机制优点双亲委派机制 Java虚拟机对class文件采用的是按需加载的方式&#xff0c;也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加…

一些有趣的小项目合集~

pyqt人脸识别&#xff1a; nullhttps://www.jb51.net/article/168718.htmpyqt目标检测&#xff1a; 利用PyQt5为目标检测Faster-rcnn-Pytorch添加GUI界面&#xff08;二&#xff09;-python黑洞网 (pythonheidong.com)https://www.pythonheidong.com/blog/article/337144/e2d…

最常见的IMU:MPU6050

I2CI^2CI2C通讯 ​ I2CI^2CI2C is a two-wire interface comprised of the signals serial data (SDA) and serial clock (SCL). In general, the lines are open-drain and bi-directional. In a generalized I-C interface implementation, attached devices can be a maste…

优雅的处理参数校验以及异常

1、前言 编写控制层时&#xff0c;我们可能会自己去校验请求参数&#xff0c;就会出现这样的代码&#xff1a; if (StringUtils.isEmpty(memberSid)) {return new JsonResult(false, "参数memberSid为空"); } if (null test) {return new JsonResult(false, "…