SpringMVC 常用注解介绍

Spring MVC 常用注解介绍

文章目录

  • Spring MVC 常用注解介绍
    • 准备
    • 1. @RequestMapping
      • 1.1 介绍
      • 2.2 注解使用
    • 2. 请求参数
      • 2.1 传递单个参数
      • 2.2 传递多个参数
      • 2.3 传递对象
      • 2.4 传递数组
    • 3. @RequestParam
      • 3.1 注解使用
      • 3.2 传入集合
    • 4. @RequestBody
    • 5. @PathVariable
    • 6. @RequestPart
    • 7. @RestController
      • 7.1 介绍
      • 7.2 @ResposeBody

本文主要介绍在使用 Spring MVC 构建网络请求时常用到的注解以及其使用方式

准备

在正式讲解注解前,我们先准备一个测试案例:

  1. 构建一个Spring Boot项目(Spring MVC项目和Spring Boot项目的构建方式一致,这里使用的是IDEA专业版,自带Spring Initializr,其它版本需要自行安装插件)

在这里插入图片描述

  1. 引入Spring Web模块

    在这里插入图片描述

  2. 删除一些没必要文件

    在这里插入图片描述

  3. 按顺序创建Controller类代码并启动主程序BlogSpringMvcApplication

    在这里插入图片描述

    输入链接测试一下:http:127.0.0.1:8080/test1

    在这里插入图片描述

返回成功!

1. @RequestMapping

1.1 介绍

RequestMapping是Spring Web MVC应用程序中最常用的注解之一,用来注册接口的路由映射,表示服务器收到路径为/test1的请求后,就会调用Test1这个方法

路由映射:当用户访问某个URL时,将用户的请求对应到服务器中某个类的某个方法的过程就叫做路由映射

如代码所示:

@RestController 
public class TestController {@RequestMapping("/test1")public String Test1() {return "Hello MVC";}
}

注:上述代码中@RestController的作用:

一个项目中会有很多的类,Spring会扫描所有的类,并只有当这个类有被@RestController注解修饰时Spring才会进去这个类并查看有没有被@RequestMapping修饰的方法

2.2 注解使用

@RequestMapping可以修饰方法,也可以修饰类

  • 当@RequestMapping修饰方法时,访问该方法的路径就是当前修饰方法的@RequestMapping中的路径
  • 当@RequestMapping修饰类时,访问该方法的路径就是修饰类的@RequestMapping中的路径+ 当前修饰方法的@RequestMapping中的路径

如代码所示:

@RequestMapping("/total")
@RestController
public class TestController {@RequestMapping("/test1")public String Test1() {return "Hello MVC";}
}

启动Spring, 此时重新访问路径http:127.0.0.1:8080/test1就已经访问不到了

在这里插入图片描述

现在的访问路径为:类路径 + 方法路径http:127.0.0.1:8080/total/test1

在这里插入图片描述

注:

  • 路径前的“/”可以不加(“/total”),Spring启动后会进行判断,若没有加“/"Spring会自动帮你添加,但建议主动加上

  • @RequestMapping既支持GET请求,也支持POST请求,同时也支持其它请求,若需要指定请求,可将注解改为:

    @RequestMapping(value = "/test1", method = RequestMethod.POST)
    

    指定请求方式后,当前接口只能接收相应请求方式的请求,否则会报错(这里使用postman进行测试, 接口请求方式指定为POST请求, 并用GET请求进行访问):

    在这里插入图片描述

2. 请求参数

这里补充一下Spring MVC对接收参数的格式要求

2.1 传递单个参数

当我们只接收单个参数时,不需要加其它注解,Spring MVC直接用方法中的形参就可以了:

@RequestMapping("/name" )
public String Test2(String name) { // 传入参数形参名称需与接口参数形参名称一致return "hi " + name;
}

在这里插入图片描述

  1. 传入的形参名称要与接口形参的名称一致,否则返回参数默认为null

  2. 用基本类型(int)充当参数时, 参数必须传(boolean类型除外),否则会出现异常(500)

    @RequestMapping("/num")public int Test3(int n) {return n;}   
    
  3. 若传入参数类型与接口参数类型不匹配,则会出现异常(500)

    在这里插入图片描述

2.2 传递多个参数

当传入多个参数时,传入的参数名称要与接口中有的参数名称一致,传入顺序可以不一致

@RequestMapping("/test4")public String Test4(String name, int age) {return "name: " + name + " age: " + age;}

在这里插入图片描述

注:传入参数数量与接口参数中数量一致,否则会抛异常(500):

在这里插入图片描述

2.3 传递对象

有时候需要的传递参数比较多,为了方便我们可以把它封装成一个对象来进行传递,比如下面的Personal对象:

import lombok.Data;@Data
public class Person {private int id;private String name;private String password;}

在这里我们使用到了一个注解:@Data

它的作用就是帮我们封装好了属性的get方法和set方法,方便我们直接调用,不过这需要我们在pom.xml文件中引入依赖lombok:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope>
</dependency>

代码示例

@RequestMapping("/test5")
public String Test5(Person person) {return "name: " + person.getName()+ " id: " + person.getId()+ " password: " + person.getPassword();
}

在这里插入图片描述

:Spring会根据参数的名称自动绑定到对象的各个属性上,若对应属性传入的参数为空,则该属性内容为null(基本类型为默认初始值)

2.4 传递数组

Spring MVC可以自动绑定数组参数并赋值:

@RequestMapping("/test7")
public String Test7(String[] arr) {return Arrays.toString(arr);
}

在这里插入图片描述

3. @RequestParam

3.1 注解使用

在某些特殊情况下,前端传给我们的参数可能与我们接口上的参数名称不一样,这个时候我们通过使用@RequestParam注解来进行后端参数重命名,如下:

@RequestMapping("/test6")
public String Test6(@RequestParam("time") String createTime) {return createTime;
}

若此时给它传入参数createTime则会报错(400):

在这里插入图片描述

因为此时后端接口的参数已经被我们通过注解@RequestParam修改为了time,所以此时需要传入参数time才不会出现问题:

在这里插入图片描述

一旦加上该注解,则默认该参数是必传的,如果此时你想让这个参数修改为非必传,可以这样修改注解:

public String Test6(@RequestParam(value = "time", required = false) String createTime) {return createTime;
}

在这里插入图片描述

3.2 传入集合

默认情况下,请求中参数名相同的多个值,会被封装到数组

如果要封装到集合中,需要使用@RequestParam注解绑定参数关系:

@RequestMapping("/test8")
public String Test8(@RequestParam List<String> listParam) {return "size: " + listParam.size() + ", listParam: " + listParam;
}

在这里插入图片描述

若此时去掉注解@RequestParam,则会抛出异常(500):

在这里插入图片描述

在这里插入图片描述

4. @RequestBody

当我们想传入JSON格式的对象时,我们需要通过@RequestBody来修饰参数:

RequestBody:请求正文,意思是这个注解作用在请求正文的数据绑定,请求参数必须写在请求正文中

代码示例

@RequestMapping("/test9")
public String Test9(@RequestBody Person person) {return person.toString();
}

在这里插入图片描述

若此时去掉注解@RequestBody,则后端无法给Person对象赋值,自动填充默认参数:

在这里插入图片描述

5. @PathVariable

@PathVariable这个注解主要作用在URL路径上的数据绑定,默认将参数写到URL上,Spring MVC就能获取到:

@RequestMapping("/test10/{name}/{id}")
public String Test10(@PathVariable String name, @PathVariable("id") Integer userId) {return "name: " + name + " userId: " + userId;
}

在这里插入图片描述

注:如果传入的参数与接口参数名称不一致,则需要给@PathVariable的属性value赋值,将URL路径中对应的参数传给它

6. @RequestPart

当我们需要上传文件时,可以使用@RequestPart注解:

@RequestMapping("/test11")
public String Test11(@RequestPart MultipartFile file) throws IOException {// 获取文件名称String fileName = file.getName();// 将文件上传到指定路径file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));return "接收到的文件名称为:" + fileName;
}

此时文件也成功传输到了指定路径:

在这里插入图片描述

7. @RestController

7.1 介绍

在最开始的代码中我们使用到了@RestController这个注解,其实这个注解是有由另外两个注解组合而成的,即

@RestController = @ResponseBody + @Controller

  • @Controller: 定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理
  • @ResponseBody:定义返回的数据格式为非视图,返回一个text/html信息

它的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
}

如果只想要返回视图的话,只需要把@ResposeBody去掉剩下@Controller即可

7.2 @ResposeBody

@ResponseBody表示返回数据, 如果我们在接口上添加@ResponseBody的话,则即使返回的是html页面spring也会将它转化为单纯的文本数据返回:

@Controller
public class IndexController {@ResponseBody@RequestMapping("/index")public Object index() {return "/index.html";}
}

在这里插入图片描述

Spring MVC 也能返回html代码段:

@ResponseBody
@RequestMapping("/test12")
public String Test12() {return "<h1>Hello MVC</h1>";
}

在这里插入图片描述
以上就是本文对Spring MVC 常用注解的全部介绍与使用了,如果后续还有其它调整还会继续补充的!

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

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

相关文章

每日一题---OJ题: 链表的回文结构

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题--- 链表的回文结构 嗯...这道题好像不是很难,我们来分析分析 举个例子: 我们可以看到,上图中的两个链表都是回文结构: 即链表的回文结构是指一个链表中的结点值从前往后读和从后往前读都是一样的结构。也就是说&#xf…

详细UI色彩搭配方案分享

UI 配色是设计一个成功的用户界面的关键之一。UI 配色需要考虑品牌标志、用户感受、应用程序的使用场景&#xff0c;这样可以帮助你创建一个有吸引力、易于使用的应用程序。本文将分享 UI 配色的相关知识&#xff0c;帮助设计师快速构建 UI 配色方案&#xff0c;以满足企业的需…

老挝公司注册

随着昆明和万象之前的中老铁路开通&#xff0c;进一步加强了老挝与中国之前的经济联系。中老昆万铁路是老挝“陆锁国”变“陆联国”战略深入对接“一带一路”倡议的纽带&#xff0c;是老挝现代化基础设施建设的一个重要里程碑&#xff0c;将极大促进老挝国家经济社会发展。 如…

EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网多头注意力多变量时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网多头注意力多变量时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM-MATT变分模态分解卷积长短期记忆神经网多头注意力多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实…

好用、可靠有安全的企业局域网文件传输工具

在当今商业环境中&#xff0c;企业对于快速、安全的局域网(LAN)文件传输解决方案的需求不断攀升。选择恰当的工具对提升工作效率和保障数据安全至关重要&#xff0c;同时还能降低潜在的信息泄露风险。以下是企业在挑选局域网文件传输解决方案时应考虑的关键因素及其重要性的详细…

回文链表leecode

回文链表 偶数情况奇数情况 回文链表leecode 偶数情况 public boolean isPalindrome(ListNode head) {if (head null) {return true;}ListNode fast head;ListNode slow head;while (fast ! null && fast.next ! null) {fast fast.next.next;slow slow.next;}//反…

selenium_定位输入框并输入值_id

定位id号 from time import sleepfrom selenium import webdriver# 获取浏览器对象 driver webdriver.Edge() # 打开 url url r"C:\Users\黄永生\Desktop\软件测试\tpshop\web自动化_day01_课件笔记资料代码\02_其他资料\注册A.html" driver.get(url) # 查找元素 用…

如何合理利用多个中国大陆小带宽服务器?

我们知道在中国大陆带宽单价非常昂贵&#xff0c;一个1Mbps 带宽的机子一年就得卖好几百人民币&#xff0c;这是不值当的&#xff0c;当然我们可以去低价漂阿里云、腾讯云的轻量服务器&#xff0c;99包年&#xff0c;但是带宽太小很难崩。 所以&#xff0c;我们必须构建一个能够…

07节-51单片机-矩阵键盘

文章目录 1矩阵键盘原理2.扫描的概念3.弱上拉4.实战-实现矩阵键盘对应按钮按下显示对应值4.1配置代码模板 5.键盘锁 1矩阵键盘原理 在键盘中按键数量较多时&#xff0c;为了减少I/O口的占用&#xff0c;通常将按键排列成矩阵形式 采用逐行或逐列的“扫描”&#xff0c;就可以读…

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于RIME-SVR霜冰算法优化支持向量机的数…

【AI工具之Prezo如何自动生成PPT操作步骤】

先说优缺点&#xff1a; 最大的优点就是免费&#xff08;但说实话功能和体验方面很弱&#xff09;支持中文提问&#xff08;最好用英文&#xff09;&#xff0c;智能生成图文&#xff08;但是只能生成英文内容&#xff09;可以AI生成图片&#xff0c;图片很精美酷炫&#xff0…

Java学习-详述main方法、可变参数、数组的工具类、二维数组

详述main方法 【1】main方法&#xff1a;程序的入口&#xff0c;在同一个类中&#xff0c;如果有多个方法&#xff0c;那么虚拟机就会识别main方法&#xff0c;从这个方法作为程序的入口 【2】main方法格式严格要求&#xff1a; public static void main(String[] args){} p…

bonding原理分析和问题排查

bonding原理 发送端&#xff1a; 使用网卡bond3模式&#xff08;广播模式BOND_MODE_BROADCAST&#xff09;将报文从两个网卡同时发出&#xff0c;无需修改报文。 接收端&#xff1a; 根据发送节点时间的链路通断状态&#xff0c;接收端设置一条线路为活动线&#xff0c;另一条…

diffusion model 简单demo

参考自&#xff1a; Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读 diffusion 简单demo 扩散模型之DDPM 核心公式和逻辑 q_x 计算公式&#xff0c;后面会用到&#xff1a; 推理&#xff1a; 代码 import matplotlib.pyplot as plt import nump…

【devops】 阿里云挂载云盘 | 扩展系统硬盘 | 不重启服务器增加硬盘容量

扩容分区和文件系统&#xff08;Linux&#xff09; 文档地址 https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.smartservice_service_robot_chat_new.help.dexternal.4ac4f625Ol66kL#50541782adxmp…

C++ UML 类图介绍与设计

1 类图概述 UML(Unified Modeling Language)&#xff0c;即统一建模语言&#xff0c;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。UML从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图…

高效率改写文章,一键智能改写工具有妙招

如今&#xff0c;写作已经成为人们日常生活中不可或缺的一部分。无论是职场人士撰写工作报告&#xff0c;还是专业的作者创作文章&#xff0c;都离不开对文字的润色和改写。然而&#xff0c;随着工作量与时间压力的增加&#xff0c;如何在保证质量的前提下提高文章改写的效率成…

关于GDAL计算图像坐标的几个问题

关于GDAL计算图像坐标的几个问题_gdal读取菱形四角点坐标-CSDN博客 这篇文章写的很好&#xff0c;讲清楚了图像行列号与图像点坐标&#xff08;x,y&#xff09;对应关系&#xff0c;以及图像行列号如何转为地理坐标的&#xff0c;转载一下做个备份。 1.关于GDAL计算图像坐标的…

数据库服务的运行与登录

打开数据库服务 数据库服务: SQL Server(MSSQLServer) 运行在服务器端的应用程序, 提供数据的存储 / 处理和事务等在使用DBMS的客户端之前必须首先打开该服务 客户端连接到服务器 关于客户端 / 服务器端的说明 客户端 : 数据库管理系统(DBMS), 应用程序服务器端 : 安装的数据…

通过本机电脑远程访问路由器loopback的ip

实验拓扑图 本机电脑增加路由信息 正常设置telnet用户&#xff0c;然后通过本地电脑telnet 软件ensp中的设备&#xff0c;尝试是否可以正常访问即可 测试通过本地电脑可以正常访问ensp里面设备的loopback的ip地址了 最重要的一点是本机需要增加一条路由route add ip mask 下…