mvc的常见注解

ops/2024/10/20 6:17:08/

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

@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.ppmy.cn/ops/45323.html

相关文章

Linux 服务器配置 SSH 服务登录失败处理

任务目标 配置 Linux 服务器ssh远程登录失败处理机制&#xff0c;防止黑客爆破服务器密码 操作步骤 备份原配置文件 $ sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak安装 pam_tally2 统计登陆失败次数 # 对于Debia…

Vxetable 递归多级表头

在对vxetable 进行二次封装的时候&#xff0c;多级表头也是需要考虑进去的&#xff0c;所以需要封装一个递归列组件进行多级表头的一个渲染。 // my-table.vue <vxe-tableref"xTable":key"currentKey":data"pageData?.list || []"show-head…

Python | Leetcode Python题解之第105题从前序与中序遍历序列构造二叉树

题目&#xff1a; 题解&#xff1a; class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:if not preorder:return Noneroot TreeNode(preorder[0])stack [root]inorderIndex 0for i in range(1, len(preorder)):preorderVal pr…

如何恢复被盗的加密货币?

本世纪&#xff0c;网络犯罪的首要目标是加密货币。 这要归功于加密货币的日益普及和价值&#xff0c;网络犯罪分子已经认识到经济收益的潜力&#xff0c;并将重点转向利用这种数字资产中的漏洞。 在今天的文章中&#xff0c;我们将讨论加密货币恢复和被盗加密货币恢复。 我们…

Idea可以运行Python!

Idea可以运行Python&#xff01; 以下这篇文章为基础教程&#xff1a; idea编写运行python_idea创建python项目-CSDN博客

【LeetCode算法】第94题:二叉树的中序遍历

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树的中序遍历。访问二叉树的左子树&#xff0c;再访问二叉树的根节点&#xff0c;最后访问二叉树的右叉树。 2. 代码&#xff1a; void order(struct TreeNode* r…

Clickhouse 计算引擎架构 —— Clickhouse 架构篇(三)

文章目录 前言ClickHouse计算引擎的架构简介与设计思想架构简介设计思想 火山模型向量化引擎向量化引擎的实现方式向量化引擎的前提 计算引擎如何影响查询速度总结 前言 相比较于存储引擎的精妙设计&#xff0c;ClickHouse的计算引擎一直是一个争议非常大的话题。对ClickHouse…

专业的Java工程管理软件源码:详尽的项目模块及其功能点清单

在工程项目管理软件领域&#xff0c;我们致力于提供全过程、全方位的综合管理解决方案。该软件覆盖了建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营的各个环节&#xff0c;确保项目管理的全面性和高效性。 工程项目管理软件包含…