当前位置: 首页 > news >正文

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 注解。

相关文章:

  • SpringMVC 数据映射VC
  • 同比和环比
  • SpringBoot——整合Thymeleaf模板
  • static静态变量
  • 测试测试测试
  • 【Utils-实用工具】1 - 根据字节限制输入长度
  • [随笔] 在CSDN的6周年纪念日随笔
  • mybatis-plus中多条件查询使用and合or嵌套使用
  • Function Calling学习
  • 开源数据库同步工具DBSyncer
  • Altium Designer软件下载安装「专业PCB设计软件」Altium Designer安装包获取!
  • 【Linux 网络编程】协议的分层知识!
  • 专项技能训练五《云计算网络技术与应用》实训9 使用openVPN建立小型企业内网VPN环境
  • C语言 指针——指针变量的定义、初始化及解引用
  • 串口通信问题排查总结
  • 分享的文章《人生如棋》
  • 08.Android之View事件问题
  • iOS 颜色设置看我就够了
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JS学习笔记——闭包
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • maven工程打包jar以及java jar命令的classpath使用
  • Python_网络编程
  • zookeeper系列(七)实战分布式命名服务
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 给初学者:JavaScript 中数组操作注意点
  • 关于springcloud Gateway中的限流
  • 欢迎参加第二届中国游戏开发者大会
  • 浏览器缓存机制分析
  • 微信小程序开发问题汇总
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​ubuntu下安装kvm虚拟机
  • ​浅谈 Linux 中的 core dump 分析方法
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (bean配置类的注解开发)学习Spring的第十三天
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (分类)KNN算法- 参数调优
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十五)、把自己的镜像推送到 DockerHub
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • ***详解账号泄露:全球约1亿用户已泄露
  • .htaccess配置重写url引擎
  • .Net 6.0--通用帮助类--FileHelper
  • .net core 的缓存方案
  • .Net Core 微服务之Consul(二)-集群搭建
  • .Net mvc总结