Spring MVC 常用注解的使用

news2024/11/18 3:47:28

@ResponseBody

  • 由于 Spring MVC 是基于 MVC 这个设计模式的,所以在不加上注解的情况下,页面和前端交互的时候返回的默认是一个视图 View,或者说静态页面,而实际上用的比较多的是将处理完的数据发送给前端,所以我们可以用这个注解修饰一个类,表明这个类中的所有方法返回的都是数据,而不是视图(静态页面)

@Controller

  • 在 Spring MVC 中, 该注解通常搭配 @ResponseBody 使用,能够在项目启动的时候加载当前类,标识这是个 SpringMVC Controller 对象

@RestController

  • 该注解是一个组合注解,@RestController = @Controller + @ResponseBody

@RequestMapping

  • 用于修饰类中的方法,可以处理请求地址映射,可以用来映射用户用于访问某个 url 的请求, 例如:
@RestController
public class Main {
    @RequestMapping("hello")
    public String getName() {
        return "hello MVC";
    }
}

这个注释是同时支持 Get 和 Post 请求的,如果想要设置仅限于 Get 和 Post,可以在 RequestMapping 中设置第二个参数 method, 传入的是枚举类型RequestMethod

在这里插入图片描述
例如

@RestController
public class Main {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String getName() {
        return "Spring MVC 常用注解的使用";
    }
}

如果想要该路由只能由 Get 请求或者 Post 请求触发,除了上述说的多加一个 method 参数以外,也可以使用 @GetMapping 和 @PostMapping 注解,也是一样的效果

@RequestBody

  • 该注解通常加在参数前面,表示需要从请求中的 Body 中取出一个 JSON 对象。并且注解“修饰”的需要是一个实体类对象,举个🌰

首先我们需要有一个 Java 实体类来对应一个 JSON 对象,假设是一个 Student 实体类,有 name, age, sex 三个属性,然后向该路由发送 JSON 格式的数据:

    @Data // 会为 Student 这个类加上 getter, setter, toString 等方法
    public static class Student {
        private String name;
        private int age;
        private String sex;
    }

    @RequestMapping("/json")
    public Student getJson(@RequestBody Student student) {
        return student;
    }

然后利用 Postman 发送 JSON 格式的请求, 如下

在这里插入图片描述
后端可以正常接收到 JSON 格式的数据,也可以返回给前端这个实体类对象,其会被自动转换回 JSON 格式

@RequestPart

  • 该注解用于接收前端上传的文件, 而接收该数据的类为 MultipartFile
  • @RequestPart(“name”) 中还有一个参数, 表示前端发送来的文件名。除此之外,如果需要保存文件,则需要使用 MultipartFile类对象中的 transferTo() 方法,方法的参数是一个 File 对象, 举个🌰
	@RequestMapping("/download")       // 假设前端上传的文件名为 photo
    public String download(@RequestPart("photo")MultipartFile multipartFile) throws IOException {
        File file = new File("D:/beauty.jpg"); // 将这个文件放在路径: D:/beauty.jpg 上
        multipartFile.transferTo(file);
        return "下载文件完成";
    }

然后我们用 Postman 上传一个文件, 然后起名为 “photo” 发送给后端
在这里插入图片描述并且 D 盘中也成功下载了这个文件

在这里插入图片描述

@CookieValue

  • 使用方式: @CookieValue("CookieName")
  • 括号中是 Cookie 的名字, 能够将名字为 CookieName 的 Cookie, 对应的 value 值赋给该注解修饰的参数
    并且该注释中还可以添加第二个参数 required ,表示这个 Cookie 是否是必要的——没有这个 Cookie 就会抛出异常

举个🌰 ,有如下代码:取出名字为 “who” 的 Cookie,然后 将这个Cookie对应的值赋给 value

	@RequestMapping("/cookietest")
    public String cookieTest(@CookieValue(value = "who", required = false)String value) {
        return value;
    }

在访问这个地址之前,我们先自定义一个 Cookie:name = “who”, value = “pig”
在这里插入图片描述
然后再访问:👇

在这里插入图片描述

如上,就可以正确得到 Cookie 的值了

@SessionAttribute

  • 使用方式:@SessionAttribute(“keyName”)
  • 该注解首先会尝试获取当前和用户的对话,如果能获取到会话,就会在会话中以 “keyName” 作为 key 值获取对应的 value 值。该注解中还可以添加第二个参数(同上),required,表示是否「是必要的」,如果Session中缺少指定的值,则会抛出异常

举个🌰测试一下,首先我们先使用常规方法 HttpSessionRequest 对象来设置一下会话,增加一个["who", "pig"]的键值对

    @RequestMapping("setsession")
    public String setSessiont(HttpServletRequest req) {
        // 设置一下会话
        HttpSession session = req.getSession(true); // 设置为 True,如果不存在会话,那就创建一个会话
        if (session != null) { // 没有创建会话,那就设置一下属性
            session.setAttribute("who", "pig");
        }
        return "会话设置成功";
    }

然后再使用 @SessionAttribute 注解尝试获取:

	@RequestMapping("sessiontest")
    public String sessionTest(@SessionAttribute("who")String value) {
        return value;
    }

然后当我们访问这个网页的时候, 就会带着 sessionid 去匹配相应的会话, 再在会话中查询以 “who” 为 key 的键值对, 再将 value 赋值给注解修饰的变量

在这里插入图片描述

@RequestParam

  • 将前端发送的参数在后端进行重命名
  • 用法:@RequestParam(“oriName”) 将前端名字为 oriName 的参数赋值给该注解修饰的变量,同时还有一个 required 参数,如果required = true 表示请求的路径中一定包含这个参数

举个🌰,如下代码:

    @RequestMapping("rename")
    public String rename(@RequestParam(value = "p", required = false)String place) {
        return place;
    }

如果请求路径为:
在这里插入图片描述
那么后端接受到数据后就会将 p 对应的 value 值赋值给 place,如下
在这里插入图片描述

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

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

相关文章

第五章. 可视化数据分析分析图表—常用图表的绘制2—直方图,饼形图

第五章. 可视化数据分析分析图 5.3 常用图表的绘制2—直方图,饼形图 本节主要介绍常用图表的绘制,主要包括直方图,饼形图。 1.直方图(matplotlib.pyplot.hist) 直方图,又称质量分布图,一般用横…

[附源码]JAVA毕业设计农产品的物流信息服务平台(系统+LW)

[附源码]JAVA毕业设计农产品的物流信息服务平台(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 …

MyBatis开发的详细步骤

推荐教程:SSM框架 一、什么是Mybatis 1.mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 2.mybatis通过x…

Windows下使用labelme标注图像

安装参考链接:https://github.com/wkentaro/labelme 一、安装Anaconda Windows下安装labelme需要借助Anaconda环境,安装很简单 https://www.anaconda.com/download/ 先进入官网,然后点击Windows系统版本 下载完成之后,就按照提…

[附源码]计算机毕业设计社区生活废品回收APPSpringboot程序

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

网站都变成灰色,其实几行代码就搞定了!

最近,全站和各个App的内容都变成了灰色,包括按钮、图片等等。 这时候我们可能会好奇这是怎么做到的呢? 有人会以为所有的内容都统一换了一个 CSS 样式,图片也全换成灰色的了,按钮等样式也统一换成了灰色样式。但你想想…

Java入门教程(11) ——基本数据类型

文章目录1.数据类型22.1 整型2.2 浮点型2.3 字符型2.4 布尔型1.数据类型 分为基本数据类型和引用数据类型 如图示: 2 2.1 整型 byte 1字节 short 2 字节 int 4字节 long 8字节. Java 整型常数默认为 int 型,声明 long 型常量可以后加‘ l ’或‘ L ’…

kube-OVN总体架构

本文档将介绍 Kube-OVN 的总体架构,和各个组件的功能以及其之间的交互。 总体来看,Kube-OVN 作为 Kubernetes 和 OVN 之间的一个桥梁,将成熟的 SDN 和云原生相结合。 这意味着 Kube-OVN 不仅通过 OVN 实现了 Kubernetes 下的网络规范&#x…

热销产品缺货,滞销产品积压?WMS系统如何打造智能仓储

仓库是企业物流系统中的一个关键环节,涵盖出库、入库、质检等各个流程。传统的仓储模式单一、反应迟钝,难以适应企业的数字化经营要求。 如何在最小的人力资源下,最大限度地发挥仓库的价值,在最小的成本下,最大限度地利…

【服务器数据恢复】Zfs文件系统误删除数据的数据恢复案例

服务器故障: 一台zfs文件系统服务器,运维人员误操作删了服务器上的数据,用户联系到我们数据恢复中心要求恢复数据。 服务器数据恢复过程: 1、服务器数据恢复工程师对故障服务器所有硬盘进行扇区级镜像备份,后续的数据…

Kafka核心技术与实战 04

Kafka 不再是一个单纯的消息引擎系统,而是能够实现精确一次(Exactly-once)处理语义的实时流处理平台。 Kafka版本 Apache Kafka,也称社区版 Kafka。优势在于迭代速度快,社区响应度高,使用它可以让你有更高…

美团一面:为什么线程崩溃崩溃不会导致 JVM 崩溃

网上看到一个很有意思的美团面试题:为什么线程崩溃崩溃不会导致 JVM 崩溃,这个问题我看了不少回答,但发现都没答到根上,所以决定答一答,相信大家看完肯定会有收获,本文分以下几节来探讨 线程崩溃&#xff0…

公众号美食文案怎么写?怎么写才能吸引人?

美食类公众号的文案还是比较难写的,毕竟文案没有图片那么直观,让用户看着就有食欲。 公众号美食文案怎么写?怎么写才能吸引人?怎么写才能在字里行间透露着美食的诱惑力? 作为一个有着十年丰富经验的文案人&#xff0c…

Java编程最常见的208道面试题,一文解析

相比与这些问题,我的这 208 道面试题具备以下优点: 披沙拣金提炼出每个 Java 模块中最经典的面试题;答案准确,每个题目都是我仔细校对过的;接近最真实的企业面试,题目实用有效果;难懂的题目&am…

SAP IDoc状态70 - This IDoc is saved as the original of an edited document.

SAP IDoc状态70 - This IDoc is saved as the original of an edited document. 根据SAP的标准逻辑,一个IDoc一旦被修改了,SAP系统会自动创建一个新的IDoc(状态70)来存储IDoc修改日志。 比如idoc # IDoc 208828452,由于库存不够,所…

SQL注入【SQLi-LABS Page-1(Basic Challenges Less1-Less22)】

文章目录前言sqlmapless-1(基于错误的GET单引号字符型注入)less-2(基于错误的GET整型注入)less-3(基于错误的GET单引号变形注入)less4(基于错误的GET双引号字符型注入)less5&#xf…

Docker的资源管理控制(CPU、内存、磁盘IO配额)

目录 一、CPU 资源控制 1、设置CPU使用率上限 (1)查看CPU使用率 (2)进行CPU压力测试 (3)设置CPU使用率 2、设置CPU资源占用比(设置多个容器时才有效) 3、设置容器绑定指定的CP…

word如何转化成pdf,最新图文教学,学会只需1分钟

​在日常生活中,我们经常会遇到需要将word文档转换成PDF格式的情况。那word如何转化成pdf呢?word文件转换成PDF并不难,只要你操作正确,就可以将其快速地转化成PDF。下面就给大家分享一下操作步骤吧。 一、第一步,打开需…

嵌入式开发--STM32硬件SPI驱动74HC595

本篇是硬件SPI口驱动74HC595。 IO口模拟时序软件驱动74HC595见这一篇文章:嵌入式开发–IO口扩展–74HC595 硬件连接如下: 只用了一个74HC595,如果需要多个74HC595级联,参考前面的链接,里面有电路,不需要额…

KubeEdge云原生边缘计算公开课02——云原生边缘计算千行百业核心应用

KubeEdge云原生边缘计算公开课02——云原生边缘计算千行百业核心应用张琦:云原生边缘计算产业发展现状与趋势展望——KubeEdge云原生边缘计算产业发展概述一、云原生边缘计算的产业场景1.云计算与边缘计算的对比2.传统的把边缘计算逐步向CloudNative技术演进3.传统本…