SpringMVC之注解的使用

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
SpringMVC之注解的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、注解的使用
    • @Controller
    • @Controller
    • @RequestParam
    • @RequestHeader
    • @CookieValue
    • @SessionAttributes
    • @ModelAttribute
    • @PathVariable
    • @PostMapping、@GetMapping、@PutMapping、@DeleteMapping
    • @ResponseBody
    • @RestController
    • @RequestBody
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

通过注解,我们可以在代码中轻松地标识和配置 SpringMVC 的组件,如控制器、视图、请求映射等。这种方式大大减少了冗余的配置文件,提高了开发效率。
在本博客中,我们将深入探讨 SpringMVC 中注解的使用。我们将了解注解的基本概念和工作原理,学习如何使用注解来创建控制器、处理请求和渲染视图。此外,我们还将探讨一些常见的注解,以及如何通过注解进行参数传递和验证。
无论是 SpringMVC 的新手还是有经验的开发者,本博客都将提供有价值的信息和实际示例,帮助你更好地理解和应用注解来简化你的 Web 开发工作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、注解的使用

@Controller

作用:标记控制器,将控制器交给Spring容器管理。
位置:类上方

import org.springframework.stereotype.Controller;@Controller
public class MyController {// 处理请求的方法public void handleRequest(HttpServletRequest request, HttpServletResponse response) {// 在此编写请求处理逻辑}
}

在上述示例中,我们创建了一个名为MyController的类,并在其上添加了@Controller注解。这样,该类就被标记为一个 SpringMVC 控制器。
@Controller注解通常与@RequestMapping注解一起使用,来指定控制器处理的请求路径。

@Controller

作用:给控制器方法设置请求路径
位置:方法或类上方。用于类上,表示类中的所有控制器方法都是以该地址作为父路径。
属性:

  • value/path:请求路径
  • method:指定请求方式
  • params:规定必须发送的请求参数
  • headers:规定请求必须包含的请求头
@Controller
@RequestMapping("/c3")
public class MyController3 {/*访问路径为 /c3/annotation1支持post和get请求请求时必须带有age参数请求时必须带有User-agent请求头*/@RequestMapping(path = "/my_path",method = {RequestMethod.GET,RequestMethod.POST},params = {"age"},headers = {"User-agent"})public String annotation1(String username){System.out.println(username);return "index";}
}

在上述示例中,我们使用@RequestMapping注解指定了控制器处理的根路径为"/my_path",也就是说当用户在浏览器输入的是"/my_path"路径,则访问的方法就是annotation1。并且规定请求方法必须为GET方法,必须包含参数"age",必须带有请求头"User-agent"。

@RequestParam

作用:在控制器方法中获取请求参数
位置:方法参数前
属性:

  • name:指定请求参数名称
  • defaultValue: 为参数设置默认值
  • required:设置是否是必须要传入的参数
/*定义请求的参数名为username,默认值为sxt,不是必须的参数*/
@RequestMapping("/annotation2")
public String annotation2(@RequestParam(name = "username",defaultValue = "sxt",required = false) String name){System.out.println(name);return "index";
}

特别注意,在以下场景中,使用@RequestParam注解是必要的:

  • 强制请求参数存在:如果你的方法需要一个特定的请求参数才能正常工作,并且该参数是必需的,那么可以使用@RequestParam注解,并将required属性设置为true。这样可以确保在调用该方法时,请求中必须包含指定的参数,否则会抛出异常。
  • 明确请求参数的名称:当请求参数的名称与方法参数的名称不一致时,可以使用@RequestParam注解来指定请求参数的名称。这样可以让 Spring Web 框架正确地将请求参数的值绑定到方法参数上。
  • 处理默认值:如果你希望在请求参数不存在时为方法参数提供一个默认值,可以使用@RequestParam注解,并设置defaultValue属性。这样,当请求中没有提供该参数时,方法参数将使用默认值。
  • 类型转换:如果请求参数的类型与方法参数的类型不匹配,并且你希望进行类型转换,可以使用@RequestParam注解,并提供相应的转换规则。这样,Spring Web 框架会在参数绑定时进行类型转换。
    总的来说,使用@RequestParam注解可以更好地控制请求参数的处理,确保方法的正确性和可靠性。但在一些简单的情况下,也可以根据参数的位置或名称来获取请求参数的值,而无需使用@RequestParam注解。

@RequestHeader

作用:在控制器方法中获取请求头数据
位置:方法参数前


@Controller
public class MyController {@RequestMapping("/annotation3")public void handleRequest(@RequestHeader(name = "My-Header") String headerValue) {// 获取请求头 My-Header 的值并进行处理System.out.println("请求头 My-Header 的值为:" + headerValue);}
}

在上述示例中,我们在handleRequest方法的参数上使用@RequestHeader注解,指定了请求头的名称为My-Header。当有一个名为My-Header的请求头传递给该方法时,它会将该请求头的值绑定到方法参数headerValue上。
注:@RequestParam注解主要用于获取请求参数(指问号后的参数,如url?a=1&b=2),也可以用于获取请求头中的数据。而@RequestHeader是用来专门获取请求头的数据。

@CookieValue

作用:在控制器方法中获取Cookie数据
位置:方法参数前

/*获取User-Agent请求头获取JSESSIONID的Cookie值*/
@RequestMapping("/annotation4")
public String annotation4(@RequestHeader("User-Agent") String userAgent, @CookieValue("JSESSIONID") String jSessionId){System.out.println(userAgent);System.out.println(jSessionId);return "index";
}

在上述示例中,我们在处理方法的参数上使用@CookieValue注解,指定了 cookie 的名称为JSESSIONID。当有一个名为JSESSIONID的 cookie 传递给该方法时,它会将该 cookie 的值绑定到方法参数cookieValue上。
通过使用@CookieValue注解,我们可以直接在方法参数上获取 cookie 的值,而无需在代码中手动解析 cookie。
@CookieValue注解还可以配置其他属性,如是否必填、默认值等,以满足更具体的需求。

@SessionAttributes

作用:将Model模型中的数据存到session域中
位置:类上方

@Controller
@RequestMapping("/c4")
// 将模型中的name数据保存到session中
@SessionAttributes("name")
public class MyController4 {@RequestMapping("/t1")public String t1(Model model){// model中保存name数据model.addAttribute("name","张三");return "index";}@RequestMapping("/t2")public String t2(HttpSession session){// 从session中获取name数据System.out.println(session.getAttribute("name"));return "index";}
}

在上述示例中,@SessionAttributes作用在MyController4,那么只要保存在model模型里的数据都会保存在session域中,所以在t2方法中,可以直接获取"name"的值。

@ModelAttribute

作用1:设置指定方法在控制器其他方法前执行
位置:方法上方

@Controller
@RequestMapping("/c5")
public class MyController5 {@ModelAttributepublic void before(){System.out.println("前置方法");}@RequestMapping("/t1")public String t1(){System.out.println("t1");return "baizhan";}
}
在上述示例中,因为before方法上有@ModelAttribute,所以放进入到"/c5/.."方法的时候,会优先执行before方法,再执行"/c5/.."

作用2:从Model模型中获取数据给参数赋值
位置:方法参数前

@Controller
@RequestMapping("/c6")
public class MyController6 {// 前置方法向Model中设置数据@ModelAttributepublic void before(Model model){model.addAttribute("name","张三");}// 该参数不是从请求中获取,而是从Model中获取@RequestMapping("/t1")public String t1(@ModelAttribute("name") String name){System.out.println(name);return "baizhan";}
}

在上述代码中,t1中的name属性的值来自model中,而model的值来自方法before中

@PathVariable

作用:在RESTful风格的URL中获取占位符的值
位置:方法参数前
属性:

  • value:获取哪个占位符的值作为参数值,如果占位符和参数名相同,可以省略该属性。
import org.springframework.web.bind.annotation.PathVariable;// 在一个控制器方法上使用 @PathVariable 注解
// 路径中的{id}表示占位符,最后会封装到方法的参数中使用
// 如果占位符和参数名相同,可以省略@PathVariable的value属性
@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long id) {// 通过PathVariable 注解获取 URL 中的 id 值,并进行后续操作return repository.findById(id);
}

在上述示例中,@GetMapping(“/users/{id}”)注解将/users/{id}路径与该方法进行关联。@PathVariable(“id”)注解用于将 URL 中的{id}部分标记为路径变量。当调用/users/1这样的 URL 时,Spring 会将{id}的值解析为1,并将其传递给方法中的id参数。
通过使用@PathVariable注解,你可以方便地在 Spring Web 应用中处理 URL 路径变量。

大家仔细一点可以看见,方法上面使用的是@GetMapping注解,而不是@RequestMapping注解。@PathVariable注解用于从 URL 路径中提取变量值,并将其传递给处理方法的参数。而@GetMapping、@PostMapping、@DeleteMapping和@PutMapping是 Spring Web 框架中的注解,用于定义不同类型的 HTTP 请求的映射。
当我们使用这些注解时,可以方便地在处理方法中获取 URL 路径中的变量值,从而实现动态路由和参数传递。
例如,假设有一个接口用于获取用户详细信息,其 URL 路径可能是/users/{id}。通过使用@GetMapping(“/users/{id}”)注解来映射这个路径,并使用@PathVariable(“id”)来提取{id}部分的值,我们可以在处理方法中获取到用户的 ID,并根据这个 ID 来查询和返回相应的用户详细信息。
同样的道理,对于其他类型的 HTTP 请求(如 POST 请求用于创建新用户、DELETE 请求用于删除用户等),我们也可以使用类似的方式,通过注解和路径变量来提取和处理相应的参数。
这样做的好处是,使得我们的代码更加简洁、易读,并且能够更好地与 URL 路径进行解耦。同时,也方便了在不同的请求类型和路径下进行统一的参数处理和路由管理。

@PostMapping、@GetMapping、@PutMapping、@DeleteMapping

作用:简化设置请求方式的@RequestMapping写法

  • @PostMapping注解用于处理 POST 请求,通常用于创建资源。
  • @GetMapping注解用于处理 GET 请求,通常用于获取资源。
  • @GetMapping注解用于处理 GET 请求,通常用于获取资源。
  • @DeleteMapping注解用于处理 DELETE 请求,通常用于删除资源。

位置:方法上方。

@RestController
public class MyController {@PostMapping("/myResource")public void createMyResource(@RequestBody MyResource resource) {// 创建资源的逻辑}@GetMapping("/myResource/{id}")public MyResource getMyResource(@PathVariable("id") Long id) {// 获取资源的逻辑}@PutMapping("/myResource/{id}")public void updateMyResource(@PathVariable("id") Long id, @RequestBody MyResource resource) {// 更新资源的逻辑}@DeleteMapping("/myResource/{id}")public void deleteMyResource(@PathVariable("id") Long id) {// 删除资源的逻辑}
}

在上述示例中,@PostMapping注解用于处理 POST 请求,将请求体的数据映射到MyResource对象,并调用createMyResource方法进行资源的创建。@GetMapping注解用于处理 GET 请求,通过路径变量{id}获取资源的 ID,并调用getMyResource方法获取资源。@PutMapping注解用于处理 PUT 请求,同样通过路径变量{id}获取资源的 ID,并将请求体的数据映射到MyResource对象,调用updateMyResource方法进行资源的更新。@DeleteMapping注解用于处理 DELETE 请求,通过路径变量{id}获取资源的 ID,并调用deleteMyResource方法删除资源。
这些注解使得我们可以更加方便地定义不同请求类型的处理方法,并与 URL 路径进行解耦。同时,Spring Framework 会根据注解的信息自动生成相应的 HTTP 请求映射,从而简化了开发过程。

@ResponseBody

作用:方法返回的对象转换为JSON格式,并将JSON数据直接写入到输出流中,使用此注解后不会再经过视图解析器。使用该注解可以处理Ajax请求。
位置:方法上方或方法返回值前

@RestController
public class MyController {@GetMapping("/myResource")@ResponseBodypublic MyResource getMyResource() {// 获取资源的逻辑return new MyResource("Hello, World!");}
}

在上述示例中,@GetMapping注解表示该方法处理 GET 请求,/myResource是请求的路径。@ResponseBody注解表示方法的返回值将直接作为 HTTP 响应的内容返回给客户端。
当调用http://your-domain.com/myResource这样的 URL 时,客户端将接收到一个包含"Hello, World!"的响应。
使用@ResponseBody注解可以方便地将复杂的数据对象作为 HTTP 响应的内容返回,而无需手动进行格式转换。同时,它也提供了一种简洁的方式来处理 RESTful 风格的 API 接口。

@RestController

作用:结合了@Controller和@ResponseBody注解的功能。使用@RestController注解的类会被视为一个控制器,其中的方法默认会被注解为@ResponseBody。这意味着,这些方法的返回值将直接作为 HTTP 响应的内容返回给客户端,而不需要额外的视图解析或模板渲染。总的来说就是,控制器类下的所有控制器方法都返回JSON格式数据且不进行跳转
位置:类上方

@RestController
public class MyController {@GetMapping("/myResource")public String getMyResource() {// 获取资源的逻辑return "Hello, World!";}
}

在上述示例中,@GetMapping注解表示该方法处理 GET 请求,/myResource是请求的路径。方法的返回值将直接作为 HTTP 响应的内容返回给客户端。
当调用http://your-domain.com/myResource这样的 URL 时,客户端将接收到一个包含"Hello, World!"的响应。
使用@RestController注解可以使控制器的代码更加简洁和直观,同时也提供了一种便捷的方式来处理简单的 HTTP 请求和响应。如果你的控制器方法主要用于返回数据,而不需要复杂的视图渲染或模板逻辑,那么使用@RestController注解是一个不错的选择。

@RequestBody

作用:将请求中JSON格式的参数转为JAVA对象
位置:写在方法参数前
Axios请求发送JSON格式的参数:

// 导入 Axios 库
const axios = require('axios');// 定义请求数据
const resource = {name: 'My Resource',description: 'This is a description',
};// 发送 POST 请求
axios.post('/myResource', resource).then(response => {// 处理响应数据console.log(response.data);}).catch(error => {// 处理错误情况console.error(error);});

编写控制器:

@RestController
public class MyController {@PostMapping("/myResource")public void createMyResource(@RequestBody MyResource resource) {// 创建资源的逻辑}
}

在上述示例中,@PostMapping注解表示该方法处理 POST 请求,/myResource是请求的路径。@RequestBody注解修饰的MyResource参数将接收请求体的内容,并将其解析为MyResource对象。
当调用http://your-domain.com/myResource这样的 URL 时,客户端可以将MyResource对象的 JSON 数据作为请求体的内容发送。Spring 会将请求体的内容解析为MyResource对象,并将其传递给方法。
使用@RequestBody注解可以方便地处理请求体的数据,而无需手动解析和转换数据格式。同时,它也提供了一种简洁的方式来处理 POST 请求的参数。


总结

提示:这里对文章进行总结:

在 SpringMVC 框架中,注解是一种非常重要的配置方式,它可以帮助我们减少冗余的 XML 配置,提高开发效率。

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

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

相关文章

ValueError: invalid literal for int() with base 10:Python报错及其解决办法

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 报错情况 ValueError: invalid literal for int() with b…

数据分析--使用Web API(应用编程接口)以自动请求GitHub网站的特定信息为例爬取数据,附完整的Python代码详解

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究&#xf…

IndexError: list index out of range--Python报错原因及解决办法

报错原因 一、括号里面的索引index超出范围 例如:要查找最后一个明星的名字‘Hannah Quinlivan’,Index输入为4。在Python中,第四个元素的索引为3,因为索引是从0开始的。如果想要找最后一个,但是不知道索引为几的时候…

ERROR: Cannot unpack file C:\Users\admin\AppData\Local\Temp\pip-unpack-yo8pmupp\simple.htm (download

出现报错 出现了这个报错 ERROR: Cannot unpack file C:\Users\admin\AppData\Local\Temp\pip-unpack-yo8pmupp\simple.htm (downloaded from C:\Users\admin\AppData\Local\Temp\pip-req-build-bscsadf5, content-type: text/html); cannot detect archive format ERROR: Ca…

创建数据库python: can‘t open file ‘manage.py‘: [Errno 2] No such file or directory报错

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 在创建数据库时运行代码 python manage.py migrate运行结…

Django的简单介绍及虚拟环境的搭建、创建项目,数据库(Windows版超级详细)--Python web应用程序开发(Python实战)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录Djanggo简介建立虚拟环境(Anaconda终端下)激活虚拟环境…

教你用8行代码将word转换为pdf格式 及 6行代码实现批量将word转换为pdf格式--python实用小技能get起来

目录将word转换为pdf格式安装pywin32上代码运行结果批量实现word转pdf安装docx2pdf上代码运行结果将word转换为pdf格式 安装pywin32 代码(Anaconda终端下) pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsingh…

用Python高效地将 多个excel表快速汇总成一个excel表--python办公实用小技能分享

相信很多友友们都遇到一个同样的问题,就是将多个excel表汇总成一个表效率极低,不止如此,还要看有没有复制错。在学校担任多种职务的我总是要汇总很多个表格,早就用python来想解决这个问题,经过借鉴网上的多位大咖的代码…

教你如何使用 Python 将 pdf 文档进行 加密 解密——python实用小技能分享

上次说了怎么将word转换为pdf格式 及 实现批量将word转换为pdf格式(点击这里),这次我又get到一个新技能–使用 Python 将 pdf 文档进行 加密 解密,哈哈哈 希望帮到更多人! 在Anaconda终端下输入代码 pip install --u…

简历避免采坑总结——为什么你的简历杳无音信?程序员的简历该怎么写?看这一篇就够了!毕业生快进 (待更新)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 这段时间熬夜看很多位程序员大佬的简历,也看了…

Git最新版下载(安装包)——阿里镜像快速下载

官网下载 https://git-scm.com/downloads 但是官网下载太慢了,我估计我这网络肯定得下载好几天呢,可能大家也是,于是我找到阿里镜像 下载最新版的Git,利用阿里镜像会下载的很快 https://npm.taobao.org/mirrors/git-for-windows…

[Git GitHub] Windows下安装git,从0开始搭建git环境(配置环境变量+设置git-ssh key...配置)(超全版)

目录前提准备安装GitGit配置配置环境变量git配置ssh认证配置过程配置邮箱和用户名(个人身份)文本换行符配置前提准备 下载地址:点击此处 点击Windows进行下载。 若下载比较慢,点击此处 安装Git 下载之后,双击Git-2…

如何将本地文件利用git工具上传到github仓库中(超详细+最新版)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 如何将本地文件利用git工具上传到github仓库中一、初次使用…

教你如何申请注册微软邮箱【快速接收发送国外邮件】

如果要收发国内的邮件。网易和QQ不错的选择,如果接受国外邮件,还是国际性的公司,微软的outlook据说用户体验感比较好,先申请着,以备不时之需! 申请地址:https://outlook.live.com/owa/ 点击创…

用python实现时间的动态(动态时钟)+ 算出某年某月星期几的所有日期

一个玩得好的朋友突然大晚上的给我布置作业,吓得我精神抖擞。他的原话是: 感觉发现新大陆了,利用小海龟画的,上次玩海龟已经是几个月之前的事情了 https://blog.csdn.net/hanhanwanghaha/article/details/106211876 话不多说&…

如何利用python将mp4文件转换为gif文件 + 代码分享 另附在线转换网址

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 想要将自己的视频设置为gif格式,但上网查了一下…

高教杯数学建模国赛论文模板+2013到2019年的国赛优秀论文+2020年数学建模论文心得---数学建模友友必看

又是一年一度的数学建模国赛,我这次是二战国赛了,不知道为什么,特别喜欢数学建模的氛围,三个人一起努力,通宵奋战,哈哈哈,也许我就是喜欢这种吃苦的感觉吧,哈哈哈(感觉自…

一年内英语四六级一次性通过,我是怎么做到的?英语听力阅读技巧干货分享!(2021年8月份最新)

要考四六级啦,要是说这几天就记几千个单词那还是有点不现实,那咱们一起来抱技巧的佛脚吧哈哈哈哈! 我四级和六级一次过,听力占了很大部分原因,我的阅读的分每次都是最低的,我也不知道为什么,我…

GIt——怎样克隆远程仓库到本地(敲详细)

克隆远程仓库,说得容易理解的话就是下载网上的东西到本地。步骤还是比较简单,之前我尝试过用SourceTree,我去那是真的麻烦,用可视化软件还不如自己敲代码,反正代码也不难,就一句话而已! 步骤 首先你打开你…

爬取B站免费视频--python代码赶快拿

首先在终端下面安装you_get 安装代码: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn you_get比如说我要下载《周杰伦演唱会一路向北》这是我非常喜欢的一个视频 地址是这个: https://www.bilibi…