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

news/2024/10/22 10:41:20/

目录

一、@RequestParam

二、@RequestBody

三、@PathVariable

四、@RequestHeader

五、@RequestAttribute

六、@RequestPart

七、@Valid

一、@RequestParam

1.作用

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

2.使用方法

java">@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.使用方法

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

3.属性说明

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

三、@PathVariable

1.作用

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

2.使用方法

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

3.属性说明

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

四、@RequestHeader

1.作用

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

2.使用方法

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

3.属性说明

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

五、@RequestAttribute

1.作用

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

2.使用方法

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

3.属性说明

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

4.示例

拦截器设置:

java">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.使用方法

java">@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.使用方法

java">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
}
java">@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 注解,统一处理验证异常。

java">@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.ppmy.cn/news/1541041.html

相关文章

第十四届单片机嵌入式蓝桥杯

一、CubeMx配置 &#xff08;1&#xff09;LED配置 &#xff08;1&#xff09;LED灯里面用到了SN74HC573ADWR锁存器&#xff0c;这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚&#xff08;使能引脚&#xff09;&#xff0c;由PD2这个端口来控制的 &#xff08;2&#xff…

多模态技术的协同表现:从文本生成、语音合成到口型同步综合测评

本文是针对多模态对话系统核心技术栈的使用效果和网络测评整理。 测评内容基于用户体验&#xff0c;侧重于从使用者角度出发&#xff0c;讨论实际操作中的体验感受&#xff0c;如技术的易用性、输出效果如文本的连贯性、语音的自然度、口型同步的准确性等。不涉及具体算法架构…

[C#][winform]基于yolov5的驾驶员抽烟打电话安全带检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面

【重要说明】 该系统以opencvsharp作图像处理,onnxruntime做推理引擎&#xff0c;使用CPU进行推理&#xff0c;适合有显卡或者没有显卡windows x64系统均可&#xff0c;不支持macOS和Linux系统&#xff0c;不支持x86的windows操作系统。由于采用CPU推理&#xff0c;要比GPU慢。…

【ubuntu18.04】ubuntu18.04安装vmware-tools之后立即适应窗口为灰色,窗口不会自适应

问题描述 ubuntu18.04安装vmware-tools 点击查看&#xff0c;看到立即适应窗口为灰色 解决方案 关闭虚拟机 编辑此虚拟机 设置 注意 取消勾选拉伸模式 查看可以看到所有选项可选择 注意&#xff1a; 不要全屏的时候查看&#xff0c;全屏看到的立即适应窗口就会显示…

Android15使用Winscope

使用 Winscope 跟踪窗口转换 | Android Open Source Project (google.cn) Winscope 是一款 Web 工具&#xff0c;可以让用户在动画和转换期间和之后记录、重放和分析多个系统服务的状态。Winscope 将所有相关的系统服务状态记录在一个跟踪文件中。使用带有跟踪文件的 Winscope…

数据分析-31-时间序列分析的卡尔曼滤波器平滑方法

1 卡尔曼滤波器估计系统状态 Kalman Filter(卡尔曼滤波器)算法是一种线性最小方差估计器,用于在存在噪声的情况下对随机过程或系统进行估计。它的基本思想是通过一系列的迭代步骤,不断优化对系统状态的估计。算法主要包含两个步骤:预测和更新。 1.1 卡尔曼滤波器的原理 …

Makefile:1954: recipe for target ‘Modules/_ssl.o‘ failed请安装ssl后,重新安装或编译Python

碰到这个问题&#xff0c;请重新安装openssl&#xff0c;并编译安装Python源码。 安装openssl sudo apt-get update sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libn…

IoT工业网关的功能与特点有哪些?IoT工业网关在现代工业生产中的应用

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;IoT工业网关作为连接物理世界与数字世界的桥梁&#xff0c;正在工业领域发挥着越来越重要的作用。 一、IoT工业网关的基本功能与特点 1、数据聚合与预处理 IoT工业网关的首要功能之一是数据聚合。在复杂的工…