SpringMVC 常用注解介绍

news2025/1/15 22:34:53

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.coloradmin.cn/o/1603663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java PDF文件流传输过程中速度很慢,如何解决?

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

Kimichat炒股:7个提示词案例

●了解股票投资基本概念和知识 什么是有息负债率&#xff1f;用浅显明白的话语针对没有财务会计基础的小白进行解释 Kimi的回答&#xff1a; 有息负债率是一个财务指标&#xff0c;用来衡量一家公司在其负债中有多少是需要支付利息的。简单来说&#xff0c;就是公司借的钱中&…

Scratch四级:第02讲 字符串

第02讲 字符串 教练:老马的程序人生 微信:ProgrammingAssistant 博客:https://lsgogroup.blog.csdn.net/ 讲课目录 运算模块:有关字符串的积木块遍历字符串项目制作:“解密”项目制作:“成语接龙”项目制作:“加减法混合运算器”字符串 计算机学会(GESP)中属于三级的内…

PotPlayer 图像截取

PotPlayer 图像截取 1. PotPlayer2. PotPlayer 下载2.1. PotPlayer 240305 3. 图像截取References 1. PotPlayer http://www.potplayercn.com/ PotPlayer 是 KMPlayer 原作者姜勇囍进入新公司 Daum 之后推出的&#xff0c;继承了 KMPlayer 所有的优点&#xff0c;拥有异常强大…

go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费

环境的搭建 Kafka以及相关组件的下载 我们要实现今天的内容&#xff0c;不可避免的要进行对开发环境的配置&#xff0c;Kafka环境的配置比较繁琐&#xff0c;需要配置JDK,Scala,ZoopKeeper和Kafka&#xff0c;这里我们不做赘述&#xff0c;如果大家不知道如何配置环境&#x…

全国产化无风扇嵌入式车载电脑农耕车辆/钢厂天车行业应用

农耕车辆行业应用 背景介绍 当前农耕车车载电脑主要的功能&#xff0c;是要实现农耕车的精确的定位和导航&#xff0c;更加先进的系统则要实现农耕车自动驾驶&#xff0c;与农耕车上相关传感器的通讯(例如耕土深度的传感器, 油量存量传感器…)来实现更多的自动化、信息化的功能…

28岁转行嵌入式适合转嵌入式吗?

转行到嵌入式领域是一个很好的选择&#xff0c;特别是如果你对电子技术、嵌入式系统和软硬件交互感兴趣的话。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给个评论222&a…

Java面试八股之JDK和JRE的区别

JDK和JRE的区别 定义&#xff1a;JDK&#xff08;Java Development Kit&#xff09;是Java开发工具包的缩写&#xff0c;它是Java开发人员必备的工具。JDK包含了编译器(javac)、Java虚拟机(JVM)和Java类库等开发工具和资源。它提供了开发、编译、调试和运行Java程序所需的一切…

NLP学习(1)-搭建环境

前言 仅记录学习笔记&#xff0c;如有错误欢迎指正。 环境搭建 一、环境软件安装&#xff1a; 1、Anaconda安装&#xff08;一款可以同时创建和管理多个python环境的软件&#xff09; (1) 安装链接&#xff1a; https://blog.csdn.net/m0_61531676/article/details/126290…

适用于Windows电脑的最佳数据恢复软件是哪些?10佳数据恢复软件

丢失我们系统中可用的宝贵信息是很烦人的。我们可以尝试几种手动方法来重新获取丢失的数据。然而&#xff0c;当我们采用非自动方法来恢复数据时&#xff0c;这是一项令人厌烦和乏味的工作。在这种情况下&#xff0c;我们可以尝试使用一些正版硬盘恢复软件进行数据恢复。此页面…

【honggfuzz学习笔记】honggfuzz的基本特性

本文架构 1.动机2.honggfuzz的基本概念官网描述解读 3. honggfuzz的反馈驱动(Feedback-Driven)软件驱动反馈&#xff08;software-based coverage-guided fuzzing&#xff09;代码覆盖率代码覆盖率的计量单位 代码覆盖率的统计方式 硬件驱动反馈&#xff08; hardware-based co…

.NET开源免费的跨平台框架 - MAUI(附学习资料)

前言 前几天分享了一个.NET MAUI开源免费的UI工具包 - Uranium&#xff0c;然后技术群有不少同学问.NET MAUI是不是免费的&#xff1f;能做什么&#xff1f;今天特意写这篇文章来介绍一下.NET开源、免费&#xff08;基于MIT License&#xff09;的跨平台框架&#xff1a;MAUI。…

使用WebSocket实现答题积分排名实时更新的功能

需求分析 接到一个需求&#xff0c;是一个答题积分小程序&#xff0c;其中有一个功能需求是需要实时更新答题积分排名的。之前通常比较常见的需求&#xff0c;都是指定某个时间点才更新答题排行榜的数据的。 经过技术调研&#xff0c;要实现答题积分排名实时更新的功能&#…

Stable Diffusion XL优化终极指南

如何在自己的显卡上获得SDXL的最佳质量和性能&#xff0c;以及如何选择适当的优化方法和工具&#xff0c;这一让GenAI用户倍感困惑的问题&#xff0c;业内一直没有一份清晰而详尽的评测报告可供参考。直到全栈开发者Flix San出手。 在本文中&#xff0c;Flix介绍了相关SDXL优化…

李沐45_SSD实现——自学笔记

主体思路&#xff1a; 1.生成一堆锚框 2.根据真实标签为每个锚框打标(类别、偏移、mask) 3.模型为每个锚框做一个预测(类别、偏移) 4.计算上述二者的差异损失&#xff0c;以更新模型weights 先读取一张图像。 它的高度和宽度分别为561和728像素。 %matplotlib inline import …

openjudge_2.5基本算法之搜索_1804:小游戏

题目 1804:小游戏 总时间限制: 1000ms 内存限制: 65536kB 描述 一天早上&#xff0c;你起床的时候想&#xff1a;“我编程序这么牛&#xff0c;为什么不能靠这个赚点小钱呢&#xff1f;”因此你决定编写一个小游戏。 游戏在一个分割成w * h个正方格子的矩形板上进行。如图所示…

如何使用自定义Promptbooks优化您的安全工作流程

在当今的数字化时代&#xff0c;安全工作流程的优化变得前所未有的重要。安全团队需要快速、有效地响应安全事件&#xff0c;以保护组织的数据和资产。Microsoft Copilot for Security提供了一种强大的工具——自定义Promptbooks&#xff0c;它可以帮助安全专家通过自动化和定制…

【shell】利用k9s和config文件进入k8s集群脚本

1、需要自行安装k9s 2、config文件放在home的.kube隐藏文件夹下 #!/bin/bash# define log & color readonly FG_GREY"30" #灰色 readonly FG_RED"31" readonly FG_GREEN"32" readonly FG_YELLOW"33" readonly FG_BLU…

element-plus中的图标和文字水平对齐

<span><el-icon size"14px"><Delete /></el-icon> <span>删除</span> </span>解决方法&#xff1a;加上vertical-align: middle样式就可以了 <span><el-icon size"14px" style"vertical-align: …

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统

产品概述 煤矿安全知识基础学习VR系统 系统内容&#xff1a; 煤矿安全知识基础学习VR系统内容包括&#xff1a;下井流程&#xff08;正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全&#xff09;&#xff1b;运煤流程…