mvc的常见注解

问文心一言的,记录一下。

@PathVariable 路径变量注解

@PathVariable 是 Spring MVC 提供的一个注解,它用于从 URI 模板变量中绑定值到控制器方法的参数上。当你在 @RequestMapping@GetMapping@PostMapping@PutMapping@DeleteMapping 等注解的 URL 路径中定义占位符(例如 {variableName})时,你可以使用 @PathVariable 来提取这些占位符的值,并将它们传递给方法参数。

下面是一个简单的例子来说明 @PathVariable 的作用:

@RestController  
@RequestMapping("/api/users")  
public class UserController {  // ... 其他代码 ...  @GetMapping("/{id}")  public User getUserById(@PathVariable Long id) {  // 假设有一个服务层来获取用户信息  User user = userService.findById(id);  return user;  }  // ... 其他代码 ...  
}

在这个例子中,@GetMapping("/{id}") 定义了一个 URL 路径模板,其中 {id} 是一个路径变量。@PathVariable Long id 注解告诉 Spring MVC 从 URL 路径中提取 {id} 的值,并将其转换为 Long 类型,然后将其作为参数传递给 getUserById 方法。

当你访问 http://localhost:8080/api/users/123 时,Spring MVC 会将 123 提取出来,并将其作为 Long 类型的值传递给 getUserById 方法的 id 参数。然后,你可以在该方法中使用这个 id 值来获取相应的用户信息。

除了从 URL 路径中提取值之外,@PathVariable 还可以与请求方法的其他参数一起使用,例如查询参数(通过 @RequestParam 注解获取)或请求头(通过 @RequestHeader 注解获取)等。但是,@PathVariable 主要用于从 URL 路径中提取值。

当URL中有多个路径参数时,Spring MVC通过路径变量的顺序和@PathVariable注解来区分它们。每个路径变量在URL模板中都有一个唯一的位置,并且在Controller方法中使用@PathVariable注解的参数名必须与这些路径变量名相匹配。

以下是一个示例,展示了如何在URL中包含多个路径参数,并在Controller方法中区分它们:

@RestController  
@RequestMapping("/api/users")  
public class UserController {  // ... 其他代码 ...  @GetMapping("/{userId}/followers/{followerId}")  public String getFollowerInfo(@PathVariable Long userId, @PathVariable Long followerId) {  // 这里userId和followerId分别对应于URL中的{userId}和{followerId}  // 你可以使用这两个参数来执行一些业务逻辑  String info = "User " + userId + " has a follower with ID " + followerId;  return info;  }  // ... 其他代码 ...  
}

在这个例子中,@GetMapping("/{userId}/followers/{followerId}")定义了一个URL模板,其中有两个路径变量:{userId}{followerId}。在Controller方法getFollowerInfo中,我们使用了两个@PathVariable注解的参数:userIdfollowerId。Spring MVC会根据URL中路径变量的顺序和参数名来自动绑定值。

当你访问http://localhost:8080/api/users/1/followers/2时,Spring MVC会将1赋值给userId,将2赋值给followerId,然后调用getFollowerInfo方法。

注意,如果URL中的路径变量名和Controller方法中的参数名不匹配,你也可以在@PathVariable注解中显式指定路径变量的名称:

@GetMapping("/{user_id}/followers/{follower_id}")  
public String getFollowerInfo(@PathVariable("user_id") Long userId, @PathVariable("follower_id") Long followerId) {  // ...  
}

在这个例子中,尽管URL中的路径变量是{user_id}{follower_id},但我们在@PathVariable注解中指定了参数名userIdfollowerId,所以Spring MVC仍然能够正确地将值绑定到参数上。

总结:

@PathVariable 注解允许从 URL 路径中提取参数值,并将它们绑定到 Controller 方法中的方法参数上。只需要确保 URL 路径中的占位符(如 {userId})与方法参数上的 @PathVariable 注解名称相匹配,Spring MVC 就会自动处理这些值的绑定。如果方法的形参名称与占位符不同,@PathVariable("路径参数名")

@RequestParam的作用:

@RequestParam 是 Spring MVC 中用于处理 HTTP 请求中查询参数(即 URL 中 ? 后面的参数)的注解。当你想从 HTTP GET 或 POST 请求的查询字符串中获取参数值,并将其绑定到 Controller 方法的参数上时,你可以使用 @RequestParam

@RequestParam 注解提供了以下特性:

  1. 名称(Name):通过 value 属性指定查询参数的名称。如果省略 value 属性,则默认使用方法参数名作为参数名称。

  2. 默认值(Default Value):通过 defaultValue 属性为参数指定一个默认值。如果请求中没有提供该参数,则使用该默认值。

  3. 必需性(Required):虽然 @RequestParam 本身没有直接的 required 属性(与 @PathVariable 不同),但你可以通过检查参数是否为 null 或使用其他验证机制来确保参数的存在。

  4. 数据类型(Data Type):你可以将查询参数绑定到任何可以接收字符串并可能执行类型转换的参数类型上,例如 String、基本类型(如 intlong 等,但应使用其包装类 IntegerLong 等,因为基本类型不能是 null)或自定义类型(如果提供了相应的类型转换器或格式化程序)。

URL:http://localhost:8080/api/blog/of/user?&id=1&current=1

Request Method:GET

//一开始写错了,我要记住正确用法
@GetMapping("/of/user")
public Result queryBlogPage(@RequestParm(value = "current",default = "1") Integer current@RequestParm(value ="id") Long userId) {
//根据userId查blog
blogService.getBlogById(userId);//根据用户查询blogPage<Blog> page =  blogService.query().eq("user_id",userId).page(new Page<>(current,MAX_SIZE_PAGE));List<Blog> records = page.getRecords();return Result.ok(records);
}

@RequestBody的作用

@RequestBody 是 Spring MVC 中用于处理 HTTP 请求体的注解,通常用于 POST 或 PUT 请求。它可以将请求体中的数据(如 JSON、XML 等)绑定到 Controller 方法的参数上,从而实现请求体的自动解析和绑定。

当使用 @RequestBody 时,Spring 会使用注册的 HttpMessageConverter(如 MappingJackson2HttpMessageConverter 用于 JSON)来将请求体中的数据转换为相应的 Java 对象。这意味着你需要在 Controller 方法中定义一个与请求体数据结构相匹配的参数,并使用 @RequestBody 注解来标记它。

@RequestBody 的主要特性包括:

  1. 自动解析请求体:Spring 会自动将请求体中的数据解析为 Java 对象,并将其绑定到带有 @RequestBody 注解的参数上。

  2. 支持多种数据格式:通过配置不同的 HttpMessageConverter,可以支持 JSON、XML、表单数据等多种请求体数据格式。

  3. 参数类型:由于请求体中的数据通常会被转换为 Java 对象,因此带有 @RequestBody 注解的参数类型通常是与请求体数据结构相对应的 Java 类或接口。

  4. @PostMapping("/users")  
    public ResponseEntity<?> createUser(@RequestBody User user) {  // 在这里,user 参数已经自动绑定了请求体中的 JSON 数据  // 执行创建用户的逻辑  // ...  return ResponseEntity.created(URI.create("/users/" + user.getId())).build();  
    }  // 假设 User 类如下:  
    public class User {  private Long id;  private String name;  private String email;  // getters, setters, toString 等方法...  
    }

    在这个示例中,当你发送一个包含 JSON 数据的 POST 请求到 /users 路径时,Spring 会自动将请求体中的 JSON 数据解析为一个 User 对象,并将其绑定到 createUser 方法的 user 参数上。然后你就可以在方法内部使用这个 User 对象来执行创建用户的逻辑了。

    需要注意的是,@RequestBody 注解通常与 @PostMapping@PutMapping 或 @PatchMapping 等处理 HTTP POST、PUT 或 PATCH 请求的注解一起使用。在处理 GET 请求时,由于 GET 请求通常不包含请求体,因此不会使用 @RequestBody 注解。

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

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

相关文章

基于深度学习和opencv的车牌识别系统

免费获取方式↓↓↓ 项目介绍028&#xff1a; 基于深度学习和opencv的车牌识别系统 同时利用对图片每一帧图像加入视频分析模块 图片分析模块可以依据界面按钮提示进行相应功能 视频分析模块可以根据按钮提示进行对视频的分析 &#xff08;视频模块的视频追踪处理时间较长&…

跨平台之用VisualStudio开发APK嵌入OpenCV(一)

序 本篇是杂谈以及准备工作&#xff08;此处应无掌声&#xff09; 暂时不管iOS&#xff08;因为开发hello world都要年费&#xff09; 软件&#xff1a; Visual Studio 2019&#xff08;含Android SDK和NDK编译器等&#xff09; OpenCV 这是一个女仆级的系列文章&#xf…

Lookin高效调试iOS App的UI

Lookin是一款iOS开发时常用的调试软件&#xff0c;由腾讯微信读书团队QMUI开发。 它可以查看和修改iOS App里的UI对象的软件&#xff0c;展示App UI图层&#xff0c;类似于Xcode自带的UI Inspector工具&#xff0c;或另一款叫做Reveal的软件。 此外&#xff0c;虽然Lookin主体…

半年不在csdn写博客,总结一下这半年的学习经历,coderfun的一些碎碎念.

前言 自从自己建站一来&#xff0c;就不在csdn写博客了&#xff0c;但是后来自己的网站因为资金问题不能继续维护下去&#xff0c;所以便放弃了自建博客网站来写博客&#xff0c;等到以后找到稳定&#xff0c;打算满意的工作再来做自己的博客网站。此篇博客用来记录自己在csdn…

PyTorch深度学习快速入门——P1-P13

环境配置 Anaconda&#xff0c;创建conda create -n pytorch python3.12&#xff0c;使用conda activate pytorch切换到环境。安装pytorch&#xff0c;conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia&#xff0c;使用import torch&…

飞机类设计与实现

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、飞机类属性的定义 三、飞机类方法的创建 四、面向对象的封装特性 五、代码…

buu[HCTF 2018]WarmUp(代码审计)

buu[HCTF 2018]WarmUp&#xff08;代码审计&#xff09; 题目 访问source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php…

使用 Ollama框架 下载和使用 Llama3 AI大模型的完整指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年5月24日20点59分 &#x1f004;️文章质量&#xff1a;96分 目录 &#x1f4a5;Ollama介绍 主要特点 主要优点 应…

钕铁硼表面磷化处理

大家都知道烧结钕铁硼易氧化、易腐蚀&#xff0c;日久将造成磁性能的衰减甚至丧失&#xff0c;所以使用前必须进行严格的防腐处理。在之前的文章中已经向大家介绍过与烧结钕铁硼表面处理相关的知识和电镀的工艺流程&#xff0c;除了电镀之外&#xff0c;钕铁硼表面处理还可采用…

电商API接口助力直播带货选品||助力电商平台搭建选品

如今&#xff0c;直播带货如火如荼。直播带货的核心是卖货、品牌盈利&#xff0c;那想要带货效果更好&#xff0c;选品及定价是最关键的环节。 事实上&#xff0c;品牌企业可以直接使用API接口工具来辅助自身选品及定价&#xff0c;这主要是因为比价工具在直播带货选品环节能起…

git 检查用户是否是gitlab用户

背景: 公司代码要从老的git库迁到新的git库&#xff0c;老git库上部分提交用户在新git库上没有&#xff0c;解决方法: 让gitlab不再检查提交用户是否是gitlab用户。具体操作: 去掉下面的勾选&#xff0c;保存配置即可。

乘风破浪,创维汽车旗舰店落户安徽

2024年5月19日&#xff0c;创维汽车宣城家奇体验中心盛大开业。宣城市委办公室副主任师典雅、市投资促进局副局长金崇学、经开区管委会副主任汤晓峰、宣城市通信局局长梁登峰、创维汽车战区总经理刘俊、创维汽车大区总监王大明等人出席此次开业盛典&#xff0c;共同见证了创维汽…

zstd库数据压缩与解压缩

在 Visual Studio 2019 中使用 C 的 zstd 库进行数据压缩与解压缩 在今天的博客中&#xff0c;我们将探讨如何在 Visual Studio 2019 中使用 zstd 库进行高效的数据压缩和解压缩。zstd&#xff08;也称为 Zstandard 或 zstd&#xff09;是由 Facebook 开发的开源压缩库&#x…

HTML+CSS+JS(web前端大作业)~致敬鸟山明简略版

HTMLCSSJS【动漫网站】网页设计期末课程大作业 web前端开发技术 web课程设计 文章目录 一、网站题目 二、网站描述 三、网站介绍 四、网站效果 五、 网站代码 文章目录 一、 网站题目 动漫网站-鸟山明-龙珠超 二、 网站描述 页面分为页头、菜单导航栏&#xff08;最好可下拉&…

2024-BurpSuite快速配置Jython插件环境

文章目录 前言一、下载Jython二、配置Python environment 前言 很多插件需要python环境&#xff0c;Burpsuite本身是支持java的&#xff0c;Jython就是java和python的结合。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、下载Jython https://ww…

生成式AI导论2024-李宏毅

生成式AI导论2024-李宏毅 第0讲&#xff1a; 课程说明第1讲&#xff1a;生成式AI是什么第2講&#xff1a;今日的生成式人工智慧厲害在哪裡&#xff1f;從「工具」變為「工具人」 第0讲&#xff1a; 课程说明 生成式AI的入门课程 第1讲&#xff1a;生成式AI是什么 生成式人…

5.4 Go 匿名函数与闭包

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

不能错过的AI知识学习神器「Mo卡片」

1. 「Mo卡片」——知识点的另一种承载方式 1.1 产品特点 &#x1f4f1;一款专为渴望理解和掌握人工智能知识的小伙伴量身打造的轻量级 App。 &#x1f3f7;AI 知识卡片集 Mo卡片内置了 26 套卡片集&#xff0c;总计 1387 张卡片&#xff0c;每张卡片都能获得 1 个核心知识。…

GpuMall智算云:AUTOMATIC1111/stable-diffusion-webui/stable-diffusion-webui-v1.8.0

配置环境介绍 目前平台集成了 Stable Diffusion WebUI 的官方镜像&#xff0c;该镜像中整合如下资源&#xff1a; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本&#xff1a;v1.8.0 Python版本&#xff1a;3.10.…

如何用 Redis 统计海量 UV?

引言&#xff1a;在当今数字化时代&#xff0c;对于网站和应用程序的运营者而言&#xff0c;了解其用户的行为和习惯是至关重要的。其中&#xff0c;衡量页面的独立访客数量&#xff08;UV&#xff09;是评估网站流量和用户参与度的重要指标之一。然而&#xff0c;当面对海量访…