SpringMVC常用注解

@RequestMapping接口的映射,可以将HTTP请求映射到控制器方法上,通过这个注解使用不同的映射,就可以区分不同的控制器,其中RequestMapping中还有不同的属性,比如method,params,produces等在这里我们就不过多介绍了。

    除了@RequestMapping外 Sping也提供了一些更加简洁的注解,

        @GetMapping : 处理GET请求。

        @PostMapping:  处理POST。

    这两种简洁的也可以使用@RequestMapping注解来实现,使用属性method = RequestMethod.GET或RequestMethod.POST这两种方式可以分别代替上面的两个简洁的注解。

    除此之外还有许多的、还有许多的其他简洁的注解,这里我们直介绍常用的一些注解。

@RequestParam()后端参数重命名,这个注解顾名思义也就是简单的重命名,但是这个重命名的注解中有一个属性我们需要特别注意一下,    required属性(是否必传)在该注解内表示是否必传,如果必传就设置成true,否则就设置成false,如果你已经重命名了但是required设置成false此时如果不传重命名的名那么就会使该参数为空,当然重命名的名字也可以与原参数名相同:

public String func(@RequestParam(value = "name",required = false) String Name){return Name;}

    注意虽然我们对Name(参数)重命名了但是如果我们返回参数是仍然要是用Name而非name这是因为虽然我们进行了重名名但编译器在代码中还是只认识Name只不过是客户端传递参数的时候使用重命名后的名字,后端不管前端的事,我们依旧只使用Name。

   

public String func(@RequestParam String Name){return Name;}

    重命名之后的名字和原参数名相同则,参数可以省略。

     @RequestBody ()传递JSON数据 我们在postman完成这个操作,JSON就是一种数据格式,这种数据格式在Spring中可以由对象进行转化,当然JSON也可以转换成对象,@RequesetBody就是可以让对象转化为JSON格式发送个前端:

public Object method7(@RequestBody Person person) {
return person.toString();
}

    当然如果我们想返回一个JSON格式的内容我们必须有一个对象我们可以自己创建一个对象也可以通过前端post的body(正文)传递一个对象中的内容。

     

public String func(User user) throws JsonProcessingException {return new ObjectMapper().writeValueAsString(user);}

    我们可以通过ObjectMapper类中的方法将对象转换为JSON格式。

    获取URL中参数@PathVariable:如果一个URL为http://127.0.0.1:8080/132213213 我们就可以通过@PathVariable注解来获取到URL最后的这一串数字

 

public String func(User user) throws JsonProcessingException {return new ObjectMapper().writeValueAsString(user);}

    我们就可以通过这样的方式取到URL中的一些内容,@PathVariable中也有一些属性其中一个与重命名的相似。

    上传⽂件@RequestPart ,在这里我们在postman中以一张图片为例:

 @RequestMapping("/test2")public String getfile(@RequestPart("cat") MultipartFile file){String originalFilename = file.getOriginalFilename();return  originalFilename;}

    同样的@RequestPart中的参数也有着和重命名的一样相同则可省略,通过这种方式我们就可以随意地取到文件中的内容。

    Cookie和Session想必大家对这两者都有一定的链接,Cookie是客户端存储数据的一种机制,Session是服务器存储数据的一种机制,客户端可以通过set-cookie给客户端的cookie赋值。

    获取Cookie:我们有多种方法,

    1,使用HttpservletRequest

        这一种方法可以说是一种万能方法,HttpservletRequest包含了前端的所有内容,其中自然也就包含了Cookies,我们可以通过这个方法获取到Cookies中的value和name。

  

public String getCookie(HttpServletRequest httpServletRequest){Cookie[] cookies = httpServletRequest.getCookies();StringBuilder stringBuilder = new StringBuilder();if(cookies!=null){for(Cookie cur:cookies){stringBuilder.append("cookie信息"+cur.getName()+" " + cur.getValue()+"::::::");}}return stringBuilder.toString();}

    2,使用@CookieValue注解

    

public String getCookie3(@CookieValue("userName") String userName ){return "接收成功"+userName;}

    通过这种方式我们就可以访问到前端请求中deCookie,这里要注意的是@CookieValue中的这个参数,和重命名相似,只要写了这个参数就必须传这个参数,如果里面的参数与接口的参数相同那么这个参数就可以省略。 

    获取Session:获取Session同样也有几种方法

1,HttpServletSession:根据Cookie和Session的关系可知,我们是根据Cookie中的sessionId来却定Sesssion的因此我们在代码中也是通过这种方式来获取session的,并且我们是无法在前端直接看到session中的内容,因此我们需要在后端设置和获取session:

 @RequestMapping("setSession")public String setSession(HttpServletRequest httpServletRequest){HttpSession session = httpServletRequest.getSession();session.setAttribute("userName","zhangsan");return "设置成功";}@RequestMapping("getSession")public String getSession(HttpServletRequest httpServletRequest){HttpSession session = httpServletRequest.getSession();Object userName = session.getAttribute("userName");return (String) userName;}

    通过上面的方法我们就可获取到Session,通过getAttribute() 就可以获取到对应的value。

    2,HttpSession  这种方法与第一种全能方法相似,只不过参数中仅仅接收了Session的信息,对于其他的信息并没有接收:

public String getSession2(HttpSession httpSession){return (String) httpSession.getAttribute("userName");}

    通过这种方式获取Session中的value结果是一样的。

    获取Header 

  1,HttpServletRequest  通过这个万能方法就可以轻而易举的获取到Header:请提示你要输入一些你想要获得哪些Header中的内容:

    比如我们想要获得User-Agent则可以进行以下操作:

public String getHeader(HttpServletRequest httpServletRequest){String header = httpServletRequest.getHeader("User-Agent");return header;}

    结果就为:

 

    返回静态页面:要想进行这个操作首先要了解@ResttController和@Controller这两者之间的关系 。

    通过@ResttController的底层代码 可以看到,@RestController是@Controller的一个子接口,而相较于@Controller多了一个@ResponseBody,这个注解的主要作用就是是否以数据的形式传输,如果加上了这个注解,那么返回给前端的数据就以数据的形式传输,而无法进行跳转页面也就是“返回静态页面”,我们需要同时分别使用@Controller和@ResponseBody才可以传输数据。

    当然我们可以选择加或者不加例如,我们随便写一个前端代码作为参考:

    如果加上了@ResponseBody那么返回的就是数据:

 

如果我们不使用@ResponseBody仅仅使用@Controller那么将会跳转页面

   

 

   这就是跳转静态页面的基本做法。

    设置Content-Type :我们通过设置 produces属性的值, 设置响应的报头Content-Type 

    例如后端想给前端以JSON的格式传递一组数据那么就可以使用@RequestMappint中的属性来完成这一操作。

   @RequestMapping(value = "/returnJson",produces = "application/json")@ResponseBodypublic String returnJson(){return "{\"success\":true}";}

    

     通过这种方式就可以以JSON的形式返回数据。 

 

 

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

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

相关文章

快速搭建SpringBoot3+Prometheus+Grafana

快速搭建SpringBoot3PrometheusGrafana 一、搭建SpringBoot项目 1.1 创建SpringBoot项目 1.2 修改pom文件配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://…

25年山东高考报名时间为10月23日-29日

今日&#xff0c;山东省招生考试院发布关于《山东省2025年普通高等学校招生考试报名工作的通知》 其中高考报名时间定为&#xff1a;2024年10月23日29日&#xff08;每天9&#xff1a;0018&#xff1a;00&#xff09; 资格审查时间为&#xff1a;10月30日~11月11日 网上缴费时间…

Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0

文章目录 前言开发环境问题描述问题分析1. 适配Java 212. 适配AGP 8.0 解决方案补充内容最后 前言 Android Studio版本从Koala Feature Drop升级到Ladybug&#xff0c;出现了一系列报错。 开发环境 Flutter: 3.24.3Android Studio: 2024.2.1 Patch 1Java: 21.0.3Gradle: 7.4…

FPGA实现PCIE采集电脑端视频转SFP光口万兆UDP输出,基于XDMA+GTX架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案10G Ethernet Subsystem实现万兆以太网物理层方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC…

高效改进!防止DataX从HDFS导入关系型数据库丢数据

高效改进&#xff01;防止DataX从HDFS导入关系型数据库丢数据 针对DataX在从HDFS导入数据到关系型数据库过程中的数据丢失问题&#xff0c;优化了分片处理代码。改动包括将之前单一分片处理逻辑重构为循环处理所有分片&#xff0c;确保了每个分片数据都得到全面读取和传输&…

Git文件操作指令和文件状态

一、Git 文件操作指令 1、查看指定文件的状态 git status [filename] 我们在新创建且初始化过后的 git 仓库中新建一个 文件&#xff0c;然后在 git 的命令行中输入此指令后&#xff0c;就可以看到 的状态&#xff1a; 在此显示的是 Untracked 的状态&#xff0c;也就是未…

visual studio设置修改文件字符集方法

该方法来自网文&#xff0c;特此记录备忘。 添加两个组件&#xff0c;分别是Force UTF-8,FileEncoding。 截图如下&#xff1a; 方法如下&#xff1a;vs中点击“扩展”->“管理扩展”&#xff0c;输入utf搜索&#xff0c;安装如下两个插件&#xff0c;然后重启vs&#xf…

【pytorch DistributedDataParallel 及amp 使用过程遇到的问题记录 】

目录 环境问题单机多卡时&#xff1a;超时错误部分报错内容:解决方法: 存在没有使用梯度的参数报错内容:解决方法:方法1 找到不参与梯度计算的层**且**没有用处的层&#xff0c;删除方法2 DistributedDataParallel 增加参数:find_unused_parameters True DDP 训练时第一个batc…

2 两数相加

解题思路&#xff1a; \qquad 这道题可以用模拟很直观的解决&#xff0c;模式加法的计算过程&#xff0c;只不过套了一层链表的外衣。题目给出的数字在链表中是按照逆序排列的&#xff0c;即链表头节点的值代表相加数字的个位&#xff0c;这样只需要从链表头开始计算加法即可得…

系统登录接口文档Demo

接口描述 该接口用于用户登录验证。通过用户名和密码进行身份验证&#xff0c;成功后返回一个用于后续请求的认证 token。这个 token 是访问受保护资源的凭证。 时序图&#xff1a; 登录请求&#xff1a; 登录查询接口: POST {url}/api/user/login 请求体: {"username…

简单的 curl HTTP的POSTGET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目&#xff0c;需要到客户那边进行项目部署&#xff0c;项目部署完成后我们需要进行项目后端接口的测试功能&#xff0c;但是由于客户那边么有条件安装类似于postman这种的测试工具&am…

Linux:进程优先级 进程调度切换 调度算法

#1024程序员节&#xff5c;征文# 目录 1.进程优先级 1.1 概念 1.2 为什么有优先级 1.3 Linux进程优先级 2. 概念预备 2.1 并发 2.2 寄存器 主要类型&#xff1a; 2. 进程的调度与切换 3.1 进程调度 3.2 进程切换 4. 调度算法 4.1 runqueue内部结构 4.2 如何调度…

Git使用GUI界面实现任意历史版本对比

首先进入版本历史查看界面 标记某次提交 选择某次提交并和标记的提交对比 可以查看比较结果了&#xff0c;具体到每一个文件每一行代码

一篇文章快速认识 YOLO11 | 目标检测 | 模型训练 | 自定义数据集

本文分享YOLO11的目标检测&#xff0c;主要内容是自定义数据集、数据标注、标签格式转换、模型训练、模型推理等。 目录 1、数据标注 2、Labelme的json转为YOLO的txt 3、配置YOLO11代码工程 4、数据集yaml配置文件 5、YOLO11模型结构配置文件 6、编写训练代码 7、开始训…

Unity 开发学习笔记(0):

文章目录 前言为什么要去学Unity安装国际版Unity总结 前言 我最近打算学习一下Unity。所以打算从零开始做一下相关的学习笔记。 为什么要去学Unity 上位机的上限就这样&#xff0c;没有运动控制和机器视觉&#xff0c;薪资上不去C# 我非常熟练&#xff0c;所以学习Unity成本…

excel判断某一列(A列)中的数据是否在另一列(B列)中

如B列如果有7个元素&#xff0c;在A列右边的空白列中&#xff0c;输入如下公式&#xff1a; COUNTIF($B$1:$B$7,A1), 其中&#xff0c;$B$1:$B$7代表A列中的所有数据即绝对范围&#xff0c;A1代表B列中的一个单元格.

JVM 加载 class 文件的原理机制

JVM 加载 class 文件的原理机制 JVM&#xff08;Java虚拟机&#xff09;是一个可以执行Java字节码的虚拟机。它负责执行Java应用程序和应用程序的扩展&#xff0c;如Java库和框架。 文章目录 JVM 加载 class 文件的原理机制1. JVM1.1 类加载器1.2 魔数1.3 元空间 2. 类加载2.1 …

openpnp - 底部相机视觉识别CvPipeLine的参数bug修正

文章目录 openpnp - 底部相机视觉识别的CvPipeLine的参数bug概述笔记openpnp的视觉识别参数的错误原因备注补充 - 如果要直接改默认的底部视觉要注意END openpnp - 底部相机视觉识别的CvPipeLine的参数bug 概述 底部相机抓起一个SOD323的元件&#xff0c;进行视觉识别。 识别…

点餐系统需求分析说明书(软件工程分析报告JAVA)

目录 1 引言 4 1.1 编写目的 4 1.2 项目背景 4 1.3 定义 4 1.4 预期的读者 5 1.5 参考资料 5 2 任务概述 5 2.1 目标 5 2.2 运行环境 5 2.3 条件与限制 6 3 数据描述 6 3.1 静态数据 6 3.2 动态数据 6 3.3 数据库介绍 6 3.4 对象模型 6 3.5 数据采集 7 4 动态模型 7 4.1 脚本 …

《深度学习》 了解YOLO基本知识

目录 一、关于YOLO 1、什么是YOLO 2、经典的检测方法 1&#xff09;one-stage单阶段检测 模型指标介绍&#xff1a; 2&#xff09;two-stage多阶段检测 二、关于mAP指标 1、概念 2、IOU 3、关于召回率和准确率 4、示例 5、计算mAP 一、关于YOLO 1、什么是YOLO YOL…