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

后端接收参数的几种常用注解

目录

一、@RequestParam

二、@RequestBody

三、@PathVariable

四、@RequestHeader

五、@RequestAttribute

六、@RequestPart

七、@Valid

一、@RequestParam

1.作用

  • 用于将请求中的 查询参数表单参数 绑定到方法的参数上。
  • 支持 GET 和 POST 请求。

2.使用方法

@GetMapping("/search")
public ResponseEntity<List<Item>> searchItems(@RequestParam(value = "keyword", required = false) String keyword,@RequestParam(value = "page", defaultValue = "1") int page) {// 业务逻辑
}

3.属性说明

  • valuename:参数名,对应请求中的参数键名,变量名与参数名相同时可省略。
  • required:是否为必需参数,默认值为 true。如果设置为 false,当参数缺失时,方法不会报错。
  • defaultValue:参数的默认值,当请求中未包含该参数时使用。

二、@RequestBody

1.作用

  • 用于将请求体中的 JSON 数据 绑定到方法的参数上。

  • 常用于处理 POST、PUT、PATCH 请求。

2.使用方法

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {// 业务逻辑
}

3.属性说明

  • required:是否为必需参数,默认值为 true。如果设置为 false,当请求体为空时,参数值为 null

三、@PathVariable

1.作用

  • 用于将 URL 路径中的变量 绑定到方法的参数上。
  • 常用于 RESTful 风格的接口。

2.使用方法

@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable("id") Long id) {// 业务逻辑
}

3.属性说明

  • valuename:路径变量的名称,对应 {} 中的变量名。
  • required:是否为必需参数,默认值为 true

四、@RequestHeader

1.作用

  • 用于将 请求头信息 绑定到方法的参数上。

2.使用方法

@GetMapping("/profile")
public ResponseEntity<User> getProfile(@RequestHeader("Authorization") String token) {// 业务逻辑
}

3.属性说明

  • valuename:请求头的名称。
  • required:是否为必需参数,默认值为 true
  • defaultValue:当请求头缺失时的默认值。

五、@RequestAttribute

1.作用

  • 用于将 请求范围内的属性 绑定到方法的参数上。
  • 这些属性通常由拦截器或过滤器预先设置。

2.使用方法

@GetMapping("/order")
public ResponseEntity<Order> getOrder(@RequestAttribute("userId") Long userId) {// 业务逻辑
}

3.属性说明

  • valuename:属性的名称。
  • required:是否为必需参数,默认值为 true

4.示例

拦截器设置:

public class AuthInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {Long userId = // 从请求中解析用户IDrequest.setAttribute("userId", userId);return true;}
}

六、@RequestPart

1.作用

  • 用于接收 multipart/form-data 请求中的特定部分,常用于文件上传。
  • @RequestParam 不同,@RequestPart 支持解析复杂的对象和文件。

2.使用方法

@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestPart("file") MultipartFile file,@RequestPart("description") String description) {// 业务逻辑
}

3.属性说明

  • valuename:请求部分的名称。
  • required:是否为必需参数,默认值为 true

七、@Valid

1.简介

作用:用于触发对参数对象的验证。

使用场景:与参数对象(如实体类、DTO)配合使用。

常用的验证注解包括:

  • @NotNull:字段不能为空
  • @NotEmpty:集合、字符串等不能为空
  • @NotBlank:字符串不能为空白字符
  • @Size:指定集合、数组、字符串的长度范围
  • @Min@Max:指定数值的最小值和最大值
  • @Email:邮箱格式验证
  • @Pattern:正则表达式匹配

2.使用方法

public class UserDTO {@NotBlank(message = "用户名不能为空")private String username;@Email(message = "邮箱格式不正确")private String email;@Size(min = 6, max = 20, message = "密码长度必须在6到20位之间")private String password;// Getters and Setters
}
@PostMapping("/register")
public ResponseEntity<?> register(@Valid @RequestBody UserDTO userDTO, BindingResult result) {if (result.hasErrors()) {// 处理验证错误String errorMessage = result.getAllErrors().get(0).getDefaultMessage();return ResponseEntity.badRequest().body(errorMessage);}// 业务逻辑
}

3.异常处理

BindingResult 接口:

  • 用于获取验证结果,必须紧跟在被 @Valid 注解的参数后面。
  • 可用于判断验证是否通过,获取错误信息。

全局异常处理:

可以使用 @ControllerAdvice@ExceptionHandler 注解,统一处理验证异常。

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<?> handleValidationException(MethodArgumentNotValidException ex) {String errorMessage = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();return ResponseEntity.badRequest().body(errorMessage);}
}
http://www.lryc.cn/news/463564.html

相关文章:

  • 如何使用docker在linux中配置C++环境
  • darknet_ros 使用教程
  • 第九课 Vue中的v-bind指令拓展
  • DOIP协议介绍2-Diagnostic power mode information request (0x4003)消息
  • Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包
  • 二叉树中的最长交错路径
  • 高校企业数据可视化平台功能介绍/特色功能
  • RHCE第三次笔记SSH
  • JAVA基础-包装类
  • 复合逻辑运算与复合逻辑门
  • 工厂模式~
  • Elasticsearch基本使用及介绍
  • 10. PH47代码框架文件组织
  • LabVIEW提高开发效率技巧----VI继承与重载
  • 4.8 大数据发展趋势
  • 【无标题】react组件封装
  • git+cmake将Open3D配置到visual studio
  • ArcGIS-CityEngine 2024-新手小白也能试用+入门可视化vga编程--第一篇
  • IntelliJ IDEA 快捷键大全(也适用全家桶其他编辑器)
  • 基于SSM高校普法系统的设计
  • CDN加速流程分享
  • 全网爆火的排队免单模式究竟是如何运作?
  • Excel:vba实现批量修改文件名
  • 【数据分享】中国历史学年鉴(1979-2001)
  • ubuntu系统启动wmplayer提示vmware unable to install all modules的处理方法
  • 数据库原理与应用(基于MySQL):实验六数据查询
  • 【java面经thinking】二
  • 正规方程推导,详细版
  • 【原创】java+ssm+mysql在线文件管理系统设计与实现
  • cocos Creator + fairyGUI 快速入门