SpringBoot中常用的注解及其用法

news2024/9/19 16:06:47

1. 常用类注解

@RestController和@Controller是Spring中用于定义控制器的两个类注解.

1.1 @RestController

@RestController是一个组合类注解,是@Controller@ResponseBody两个注解的组合,在使

用 @RestController 注解标记的类中,每个方法的返回值都会以 JSON 或 XML等 的形式直接写入 HTTP 响应体中,相当于在每个方法上都添加了 @ResponseBody注解.

代码演示(访问127.0.0.1:8080/hello/hello1):

@RequestMapping("/hello")
@RestController
public class HelloController {
    @RequestMapping("/hello1")
    public String hello() {
        return "hello spring mvc1";
    }

}

返回的结果如下:

我们可以使用fiddler进行抓包:

可以看到返回的类型是text/html,可以把它看成是一个text或者是html.

1.2 @Controller

@Controller是一个类注解,其主要作用是标记类表示返回的是一个视图(view).这是用于传统的SpringMVC架构中的类注解.

代码演示:

@RequestMapping("/response")
@Controller
public class ResponseController {
    @RequestMapping("/index")
    public String index(){
        return "/index.html";
    }
  
}
//index.html
<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用户登录首页</title>
</head>

<body>
    登录人: <span id="loginUser"></span>
    <script src="/jquery.min.js"></script>
    <script>
       
    </script>
</body>

</html>

这样就返回了一个html页面(视图).

总之,@RestController和@Controller的区别就在于要返回一个视图(页面)还是要返回数据.

1.3 @RequestMapping

@RequestMapping表示路由映射,即通过@RequestMapping注解可以达到设置url的目的.在访问时只有加入@RequestMapping映射的部分,才能成功找到这个路径.\

代码演示:

@RequestMapping("/hello")
@RestController
public class HelloController {
    @RequestMapping("/hello1")
    public String hello() {
        return "hello spring mvc1";
    }
}

我们只有启动服务器,再访问127.0.0.1:8080/hello/hello1才能成功接收到后端返回的"hello spring mvc1"这个数据.

 2. 常用方法注解

2.1 @RequestMapping

我们刚才介绍了@RequestMapping是一个类注解,它其实还是一个方法注解,我们在使用方法时需要在方法上也添加上这个注解.同样表示的是路由映射,影响我们访问的url.我们再来看一下,其中的属性:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective({ControllerMappingReflectiveProcessor.class})
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}
public enum RequestMethod {
    GET,
    HEAD,
    POST,
    PUT,
    PATCH,
    DELETE,
    OPTIONS,
    TRACE;
}

其中我们主要介绍method这个属性,method取值于RequestMethod这个枚举类型,我们使用的最多的就是GET和POST:

    @GetMapping("/hello3")
    public String hello3() {
        return "hello spring mvc3";
    }

    @PostMapping("/hello4")
    public String hello4() {
        return "hello spring mvc4";
    }

报错信息:Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' is not supported]

POST表示只有使用post请求时才允许进行正确的响应,GET表示get请求时才允许进行正确的响应.如果这个参数不写,就表示post和get请求都允许.

2.2 @PostMapping

与 @RequestMapping(value = "/hello2",method = RequestMethod.POST)的效果类似,只允许post请求.

2.3 @GetMapping

与 @RequestMapping(value = "/hello2",method = RequestMethod.GET)的效果类似,只允许get请求.

2.4 @RequestParam

这个参数主要有两个作用.

在前端给后端传递参数时,需要规定好参数的名称,使其保持一致否则将无法成功传参.例如前端传给我们的用户名称叫做userName,但是后端接收这个参数的名称叫做name,就无法成功接收.但是我们可以使用@RequestParam这个注解进行参数的绑定,将userName绑定到name上,这样后端就可以使用name进行操作了.还可以在其中required属性中设置true/false,表示这个参数是否是必须的.

代码演示:

    @RequestMapping("/param6")
    public String param6(@RequestParam(value = "userName",required = false)String name,String password){
        System.out.println("receive userName:"+name+" password:"+ password);
        return "receive name: "+name+" password:"+ password;
    }

另外一个主要作用是用来传递集合.对于一个简单的数组来说,我们直接传递不会出现任何问题,但是如果我们直接传递一个集合,就会发现传过来的集合是空的.这时,就需要@RequestParam这个注解来将数组绑定到这个集合上,给集合赋值.'

代码演示:

    @RequestMapping("/param8")
    public String param8(@RequestParam("listParam") List<String> listParam){
        System.out.println("receive listParam: "+listParam);
        return "receive listParam: "+listParam;
    }

2.5 @RequestBody

@RequestBody这个注解主要用来接收对象(传递JSON类型的参数),比如我们需要给后端传递一个UserInfo对象:

public class UserInfo {
    public String userName;
    public String password;
    public int age;

    @Override
    public String toString() {
        return "UserInfo{" +
                "userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

我们就需要给出userName,password和age三个参数的值,在传递过程中会将这三个参数转变成JSON格式的数据,只有我们加上@RequestBody这个注解才能成功接收到这个JSON数据,并把它转换成对象.

代码演示:

    @RequestMapping("/param9")
    public String param9(@RequestBody UserInfo userInfo){
        System.out.println("receive userInfo: "+userInfo);
        return "receive userInfo: "+userInfo;
    }

2.6 @PathVariable

@PathVariable这个注解用来从url中获取到参数.比如下述例子,我们要从url中获取到articlName,我们就可以使用这个注解加上一定的格式进行获取:

    @RequestMapping("/param10/{articlName}")
    public String param10(@PathVariable("articlName") Integer articlName){
        System.out.println("receive articlName: "+articlName);
        return "receive articlName: "+articlName;
    }

2.7 @RequestPart

@PathVariable这个注解用来进行文件的接收.代码演示如下:

@RequestMapping("/param12")
    public String param12(@RequestPart MultipartFile file) throws IOException {
        System.out.println(file.getName());
        System.out.println(file.getOriginalFilename());
        System.out.println(file.getContentType());
        file.transferTo(new File("D:/temp/"+file1.getOriginalFilename()));
        return file1.getOriginalFilename();
    }

2.8 @CookieValue

@CookieValue这个注解用来根据cookie中的键获取对应的值.代码演示如下:

    @RequestMapping("/getCookie2")
    public String getCookie2(@CookieValue("lzq") String value) {
        System.out.println(value);
        System.out.println("get cookies successfully");
        return "get cookies successfully";
    }

2.9 @SessionAttribute

@SessionAttribute这个注解用来根据session中的键获取对应的值.代码演示如下:

    @RequestMapping("/getSession3")
    public String getSession3(@SessionAttribute(value = "name",required = false) String name) {
        System.out.println("name "+name);
        System.out.println("get session successfully");
        return "get session successfully";
    }

2.10 @RequestHeader

@RequestHeader这个注解用来根据header中的键获取对应的值.代码演示如下:

    @RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader("User-Agent") String userAgent) {
        System.out.println(userAgent);
        System.out.println("get userAgent successfully");
        return "get userAgent successfully";
    }

2.11 @ResponseBody

@ResponseBody是@RestController的一部分,通常用在当@Controller修饰类控制器,而其中某些方法需要返回数据而不是视图时,代码演示如下:

    @ResponseBody
    @RequestMapping("/returnData")
    public String returnData() {
        System.out.println("returnData");
        return "returnData";
    }

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

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

相关文章

《昇思25天学习打卡营第07天|qingyun201003》

日期 心得 越往后&#xff0c;越看不懂&#xff0c;只能说是有了解到如何去训练模型代码&#xff0c;对于模型代码该如何去保存&#xff0c;如何通过网络模型去训练。只能一步步来&#xff0c;目前来说是推进度&#xff0c;等后面全部有了认知&#xff0c;再回来重新学习 昇思…

Re:从零开始的C++世界——类和对象(中)

文章目录 前言1. 类的默认成员函数2. 构造函数&#x1f34e;概念&#x1f34e;特点&#x1f34c;特点一&#x1f34c;特点二&#x1f34c;特点三&#x1f34c;特点四&#x1f34c;特点五&#x1f34c;特点六&#x1f34c;特性七 &#x1f34e;总结 3.析构函数&#x1f34e;概念…

Foxmail新版本迁移邮箱的数据文件教程

Foxmail作为轻量化办公中使用最多的邮件沟通应用&#xff0c;而当其邮件积累到一定数量后&#xff0c;会几乎占满所在的硬盘空间&#xff0c;小编接下来为大家介绍如何将邮件数据文件迁移到其他硬盘&#xff0c;且迁移后保持foxmail的旧邮件数据存在&#xff0c;方便搜索和转发…

职升网:一建和注安哪个难度大?哪个含金量高?选择哪个?

从考试难度来看&#xff0c;一级建造师&#xff08;简称一建&#xff09;的考试难度通常被认为要高于注册安全工程师&#xff08;简称注安&#xff09;。一建考试涵盖的内容比较广泛&#xff0c;需要考生对教材进行全面了解和深入复习&#xff0c;特别是在实务这一块内容&#…

第三季度加密市场动荡:市场缺乏炒作题材,波动加剧

摘要 根据 Arkham 的数据&#xff0c;德国政府联邦刑事调查局 (BKA) 可能已完成抛售&#xff0c;其持有量从 6 月中旬的约 50,000 BTC&#xff08;35.5 亿美元&#xff09;减少到 7 月 12 日的数据为 0 BTC。市场担忧美国经济在今年晚些时候或 2025 年初陷入衰退&#xff0c;导…

使用mitmproxy抓包详细记录(一)

1、安装mitmproxy pip install mitmproxy 安装失败解决方案&#xff0c;见上一篇 2、编辑代码&#xff0c;可以直接复制我的. 给文件起名&#xff0c;attacy.py import mitmproxyimport csv from mitmproxy import httpclass RequestRecorder:def __init__(self):self.records…

植物大战僵尸杂交版等超火的版本汇总(附说明和下载链接)

1.杂交版 &#xff08;最火的一版&#xff09; B站游戏作者潜艇伟伟迷&#xff08;点击进进入作者空间&#xff09; 夸克网盘链接&#xff1a;https://pan.quark.cn/s/095de551d1d1 UC网盘链接&#xff1a;https://drive.uc.cn/s/86debb3ce1294 新增7月5日更新的2.2版本链接…

条件匹配工具之ACL概述

基本概念 ACL&#xff0c;即Access Control List&#xff08;访问控制列表&#xff09;&#xff0c;每个ACL但是是由单条或多条Rule&#xff08;规则&#xff09;组成的一个集合 技术背景&#xff1a; 1.用户需求&#xff1a; 用户对网络服务体验的要求越来越高&#xff0c…

Openerstry + lua + redis根据请求参数实现动态路由转发

文章目录 一、需求分析二、准备1、软件安装2、redis-lua封装优化 三、实现1、nginx.conf2、dynamic.lua注意 3、准备两个应用4、访问nginx 四、参数直接传要代理的地址端口 一、需求分析 根据用户访问url的参数&#xff0c;将请求转发到对应指定IP的服务器上。 二、准备 1、…

java实现树形结构的设计

一、页面效果 二、数据库表设计 CREATE TABLE qc_question (id bigint(20) NOT NULL AUTO_INCREMENT,p_id bigint(11) NOT NULL,rank int(4) NOT NULL COMMENT 层级,name varchar(255) NOT NULL COMMENT 名称,code varchar(255) DEFAULT NULL COMMENT 编号,group_id bigint(20…

网络安全防御【防火墙双机热备带宽管理综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路&#xff1a; 四、实验步骤&#xff1a; 1、FW3的网络相关配置&#xff1a; 2、FW1的新增配置&#xff1a; 3、交换机LSW6&#xff08;总公司&#xff09;的新增配置&#xff1a; 4、双机热备技术配置&#xff08;双机热…

【人工智能】高级搜索技术(模拟退火搜索算法和遗传算法解决旅行商问题)

目录 一、旅行商问题 1. 需求分析 2. 数据结构、功能模块设计与说明 2.1 数据结构 &#xff08;1&#xff09;模拟退火搜索算法 &#xff08;2&#xff09;遗传算法 2.2 功能模块设计 &#xff08;1&#xff09;模拟退火搜索算法 &#xff08;2&#xff09;遗传算法 …

离散数学,传递闭包的运算 ,集合的划分和覆盖 ,等价关系 ,等价类,相容关系 ,偏序关系

目录 1.传递闭包的运算 2.集合的划分和覆盖 3.等价关系 4.等价类 等价关系的性质 商集 5.相容关系 相容类 写出以下相容关系的最大相容类 完全覆盖 6.偏序关系 覆盖 7.哈斯图例子 1.传递闭包的运算 2.集合的划分和覆盖 3.等价关系 4.等价类 等价关…

starrcoks内存溢出后重启失败

sr版本&#xff1a;version 2.1.12 RELEASE (build 04f2931) 部署方式&#xff1a; FE:10.6.xx.107~10.6.xx.109 BE:10.6.xx.107~10.6.xx.111 问题&#xff1a;某天10.6.xx.107机器上的BE提示内存溢出&#xff08;日志如下&#xff09;&#xff0c;重启后&#xff0c;be却无法…

Gooxi受邀参加第三届中国数据中心服务器与设备峰会

7月2-3日&#xff0c;第三届中国数据中心服务器与设备峰会在上海召开&#xff0c;作为国内最聚焦在服务器领域的专业峰会&#xff0c;吸引了来自全国的行业专家、服务器与机房设备厂家&#xff0c;企业IT用户&#xff0c;数据中心业主共同探讨AIGC时代下智算中心设备的设计之道…

普通人用AI提升收入的四种途径分享(附教程)

全文干货视频很长&#xff0c;建议先收藏再看。 实操和AI绘画工具可以扫描下方&#xff0c;免费获取 01 提升赚钱效率&#xff1a;拆解主业&#xff0c;让AI为你的主业做乘法 首先我要告诉你的是&#xff0c;用 AI 来提升收入这件事并不难&#xff0c;只不过大多数人用错了方…

文心一言 VS 讯飞星火 VS chatgpt (304)-- 算法导论22.2 2题

二、请计算出在图22-3所示无向图上运行广度优先搜索算法后的 d 值和 π 值。这里假定结点 u 为算法所用的源结点。 文心一言&#xff1a; 为了计算在图22-3所示的无向图上运行广度优先搜索&#xff08;BFS&#xff09;算法后的d值和π值&#xff0c;我们首先需要明确图的结构…

【linux】服务器重装系统之系统盘写入准备

【linux】服务器重装系统之系统盘写入准备 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器重装系统之系统盘写入准备一、前期准备1、准备一个U盘&#xff0c;并进行格式化2、下载UltralSO工具3、下载对应的Ubuntu版本 二、写入操作教程 一、…

手机和电脑通过TCP传输(一)

一.工具 手机端&#xff1a;网络调试精灵 电脑端&#xff1a;野火网络调试助手 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信…