JavaEE Spring MVC 常用注解

news2024/11/25 20:24:29

@RequestMapping

       ⽤来注册接⼝的路由映射。当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。

@Controller //类注解不能忘
@RequestMapping("/webcontroller")
public class WebController {

    @RequestMapping("/sayhi")
    public String sayHi() {
        return "Hi~";
    }
}

通过输入网址localhost:8080/webcontroller/sayhi就可以访问到。但是实际上你看到的又不一样。

对于上述的情况,在确定你的URL正确的情况下,我们需要另外加一个注解:@ResponseBody,加在类上。就可以让页面打印出来Hi~。

@ResponseBody

        @ResponseBody的作用是将Java对象转为某种格式的数据,用来返回JSON数据或者XML数据。SpringMVC模型如下:

        没有加这个注解的时候,Controller返回的数据将经过View,经过View转发后返回给客户端,而加了注解,相当于将数据直接返回给客户端。View表示视图的意思,也就是说,如果没有加该注解,View希望拿到一个html页面。

现在写一个简单的html页面,后端返回该页面。看看没有加@ResponseBody:

@Controller
// @ResponseBody
@RequestMapping("/webcontroller")
public class WebController {

    @RequestMapping("/sayhi")
    public Object sayHi() {
        return "/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>Document</title>
</head>
<body>
<div>
    <h1>Hello World!</h1>
</div>
</body>
</html>

加了@ResponseBody:

当然,如果我们这样写代码: 

 

这是浏览器自动解析的结果。

        @ResponseBody注解使用的地方非常多,和@Controller组合起来一个新的注解叫@RestController,起到@ResponseBody+@Controller的作用。

@RequestMapping是post请求还是get请求

前面我们说@RequestMapping注解,那么他是post请求还是get请求?使用PostMan快速测试。

        可以看出, @RequestMapping既可以是post也可以是get请求。但是一般情况下,我们并不希望一个方法可以解析多个请求,要么只解析get请求,要么只解析post请求。我们可以通过method来指定。

发送get请求:

更简单的写法:@GetMapping 和 PostMapping

@GetMapping 和 PostMapping

@Controller
@ResponseBody
@RequestMapping("/webcontroller")
public class WebController {

    @GetMapping("/getmapping")
    public String getMapping() {
        return "getMapping";
    }
}

发送get请求: 

@Controller
@ResponseBody
@RequestMapping("/webcontroller")
public class WebController {

    @PostMapping("/postmapping")
    public String postMapping() {
        return "postMapping";
    }
}

发送post请求:

传递参数

        以前什么传递参数,现在仍然什么传递参数,非常的方便。可以传单个参数,也可以传多个参数,还可以传一个对象,这里不在演示。

    @GetMapping("/getmapping")
    public String getMapping(String name) {
        return "name: " + name;
    }

@RequestParam后端参数重命名

        某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 不⼀致,这个时候,我们可以使用@RequestParam注解来重命名。 

        但是这样的话,他只能获取前端传来的prename。如果前端传来别的参数,也会报错,所以需要另外加一个required属性,值为false,用来指定prename是不是必须要传的。

@RequestBody

用来接受json格式的对象。如果不加该注解,是获取不到参数的。同时,需要传给一个对象。

        使用HashMap作为返回值的原因是他也是key-value格式,返回给前端就会被转化成json。当然,你返回User的对象也是可以的,符合key-value的格式。

@Data //需要添加lombok支持
public class User {

    private String name;
    private Integer password;
}

    @RequestMapping("/jsonlogin")
    public User jsonLogin(@RequestBody User user) {
        User user1 = new User();
        user1.setName(user.getName());
        user1.setPassword(user.getPassword());
        return user1;
    }

@PathVariable 

        这个参数用来获取URL中的参数。

    @RequestMapping("/pathvariable/{name}/{password}")
    public String pathVariable(@PathVariable String name,@PathVariable Integer password) {
        return "name: " + name + " | password: " + password;
    }

@RequestPart

        用来上传文件。

    @RequestMapping("/requestpart")
    public String requestPart(String name, @RequestPart("myfile") MultipartFile file) {
        try {
            file.transferTo(new File("E:\\Git\\java-learning\\22_java_12\\java_12_01\\java120101\\src\\main\\resources\\static\\image\\img.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "success!";
    }

@CookieValue

        获取cookie。

    @RequestMapping("/getcookie")
    public String getCookie(@CookieValue("name") String name,
                            @CookieValue("password") Integer password) {
        return "name: " + name + " | password: " + password;
    }

 读取Session

        @SessionAttribute用来获取session。

    //先设置session    
    @RequestMapping("/setsess")
    @ResponseBody
    public String setSess(HttpServletRequest request) {
        HttpSession httpSession = request.getSession(true);
        if (httpSession != null) {
            httpSession.setAttribute("name", "111");
        }
        return "session";
    }

    @RequestMapping("getsess")
    @ResponseBody
    public String getSess(@SessionAttribute(value = "name", required = false) String name) {
        return name;
    }

读取请求头

使用@RequestHeader注解。

    @RequestMapping("/getheader")
    public String getHeader(@RequestHeader("user-Agent") String userAgent) {
        return userAgent;
    }

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

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

相关文章

CSDNtop1全栈接口测试教程 jmeter接口测试,接口自动化测试【2】

延时等待&#xff08;全局性&#xff09; api 测试⽤例执⾏速度⾮常快&#xff0c;某些时候因为业务的特性想让它延迟⼏秒执⾏&#xff0c;那么这个时候就使⽤延时等待。 参数化 可以理解为&#xff1a;⼀个测试点需要多次操作&#xff0c;并且每次操作数据都是不⼀样但测试步…

机器学习4超参数问题

文章目录一、超参数问题11、超参数&#xff1a;2、如何寻找好的超参数&#xff1f;二、超参数问题2综上所述三、超参数问题3搜索明可夫斯基距离相应的p;更多关于距离的定义&#xff1a;欧拉距离曼哈顿距离进一步推广可以发现其中有一定一致性明可夫斯基距离&#xff1a;&#x…

全网最全(万字整理)_SpringBoot整合ThymeLeaf

文章目录SpringBoot整合Thymeleaf0x01_入门案例0x02_Thymeleaf视图解析简介0x03_Thymeleaf的表达式0x04_Thymeleaf的标签th:textth:eachth:objectth:hrefth:actionth:onclickth:ifth:value0x05_内置对象#dates#Strings#Numbers域对象0x0x_补充一些概念国际化Thymeleaf缓存区重定…

01-09-hive-入门基本概念-hive-mysql安装

01-hive-入门基本概念&#xff1a; 什么是hive hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xf…

算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)

算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2271 完全立方数32. MT2272 质数率3. MT2273 元素共…

如何修复 Windows 11/10上的 0x8007023e Windows 更新错误

修复 0x8007023e 错误 运行 Windows Update 疑难解答重置 Windows Update 组件使用 DISM 工具修复 Windows Update 客户端从 Microsoft update Catalog 网站下载并安装更新运行 Microsoft 支持和恢复助手系统更新根据 Windows 质量更新服务节奏发布到 Windows 设备。如果当您尝…

zookeeper学习(一)zk特性与节点数据类型详解(2022)

Zookeeper是一个开源的分布式协调框架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。从设计模式角度来理解其实zk是一个基于观察者模式设计的分布式服务管理框架。 CAP理论&#xff1a; cap理论指出对于一个分布式计算系统来说&#xff0c;不可能同时满足以下三…

COMSOL泰森多边形Voronoi图多孔骨架优化模型受力分析

Voronoi模型 在comsol内建立泰森多边形骨架支撑网格&#xff0c;模型采用一般的多边形泰森多边形孔隙以及样条曲边泰森多边形孔隙做对比研究&#xff0c;分析模型在承受压力荷载下的应力分布。通过comsol的固体力学计算可看出拟圆形Voronoi孔隙支撑结构的应力分布更为合理&…

【LIMU-Bert论文阅读】

LIMU-BERT: Unleashing the Potential of Unlabeled Data for IMU Sensing Applications 题目重点&#xff1a; 充分利用无标签数据适用于IMU传感器应用&#xff08;并没有指出specfic task&#xff09; 文章核心&#xff1a; 如何根据IMU数据的特征设计出LIMU-Bert&#xff0c…

基于模糊逼近系统不确项的滑模自适应控制

目录 前言 1.系统描述 2.控制器设计 3.模糊推理估计不确定f 3.1构造模糊系统 3.2模糊推理过程 3.3 自适应律设计 4.仿真分析 4.1仿真模型 4.2仿真结果 5.总结 前言 在一般的建模仿真中&#xff0c;我们假设模型都是可以用数学模型描述出来的是确定的&#xff0c;称…

1. 一些截图方法的比较;2. 将截图直接转换为PDF并拼接,与插入Word后再转换为PDF的对比

1. 一些截图方法的比较 1.1. 有时候当某个软件没有导出功能&#xff0c;或者导出功能受限&#xff0c;比如 tableau public&#xff0c;但又需要获取展示出的可视化信息时&#xff0c;就需要用到截图。如果这些截图还要用在正式文档中&#xff0c;就需要是高清的&#xff0c;至…

Python预测卡塔尔世界杯身价最高的英格兰要夺冠?!

文章目录&#x1f3f3;️‍&#x1f308; 1. 数据&#x1f3f3;️‍&#x1f308; 2. 绘图2.1 绘制表头2.2 绘制排名、球队以及国旗2.3 绘制身价柱状图2.4 绘制FIFA排名散点图2.5 设置背景2.6 设置标题&#x1f3f3;️‍&#x1f308; 3. 更多可视化项目源码数据&#xff1a;大…

关于 find 命令的15个超级有用的例子

find 命令用于在 Linux 命令行中搜索文件和目录。 find 是功能最强大、使用最频繁的命令之一&#xff0c;同时也是选项最多的命令之一&#xff0c;它有50多个选项&#xff0c;很容易让人弄混了&#xff0c;特别是当它与 exec 或 xargs 命令一起使用的时候。 作为系统管理员或…

AI创作教程之 如何在本地 PC 上运行稳定的 Diffusion 2.0 (无代码指南)

AI 的热门图像生成器 Stable Diffusion日前发布了全新的 2.0版本。新版本比以前的版本带来了许多进步和改进。OpenCLIP 中新的深度检测和更好的文本到图像模型是我最兴奋的功能。 查看本文以查看 SD 2.0 中新增功能的完整列表。 在本文中,我将向您展示如何在本地 PC 上试用新…

PHP基于thinkphp的在线教学网站#毕业设计

在线教学系统采用B/S模式&#xff0c;促进了在线教学系统的安全、快捷、高效的发展。传统的管理模式还处于手工处理阶段&#xff0c;管理效率极低&#xff0c;随着用户的不断增多&#xff0c;传统基于手工管理模式已经无法满足当前用户需求&#xff0c;随着信息化时代的到来&am…

DataFrame API入门操作及代码展示

文章目录DataFrame风格编程DSL风格编程代码示例相关API相关代码示例SQL风格编程代码示例相关API相关代码Fucntions包基于SparkSQL的WordCount代码编写DataFrame风格编程 DataFrame支持两种风格进行编程 DSL风格SQL风格 DSL称之为领域特定语言&#xff0c;其实就是指DataFrame特…

Config配置文件读写

配置文件本质上是包含成功操作程序所需信息的文件&#xff0c;这些信息以特定方式构成。它们不是在程序中进行硬编码&#xff0c;而是用户可配置的&#xff0c;通常存储在纯文本文件中。 写配置文件 使用函数WritePrivateProfileStringW写配置文件 BOOL WritePrivateProfile…

filter: grayscale(1); | 网页变灰

效果 MDN: https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function/grayscalegrayscale(amount)对图片进行灰度转换转换值的大小&#xff0c;可以是 或 . 当值为 100% 时&#xff0c;灰度最大。0% 时与原图没有区别。0% 到 100% 之间的值会使灰度线性变化。amount …

JVM学习笔记(2)—— 运行时数据区概述及线程

在上一篇中我们讲了JVM的类加载子系统&#xff0c;现在我们就来到了运行时数据区。而不同版本的JVM对于内存的划分方式和管理机制存在着部分差异&#xff08;最典型的就是方法区实现的差异&#xff09;&#xff0c;本文针对经典的Hotspot jvm进行讨论&#xff0c;对运行时数据区…

Mongoose应用和文件上传

一、Express框架访问MongoDB数据库 1、目的&#xff1a; ​ &#xff08;1&#xff09;mongoose模块的使用 ​ &#xff08;2&#xff09;学会代码的封装&#xff1a;dao层、service层、接口层 ​ &#xff08;3&#xff09;MVC设计思想&#xff1a;M(Model)、V(View)、C(C…