SpringBoot参数校验
1.引言
在 Web 开发中,用户输入是系统的主要数据来源,但同时也是潜在的安全隐患。参数校验是确保数据安全性和系统稳定性的关键一环。
- Spring Boot 的优势:整合了 Bean Validation(JSR 380)和 Hibernate Validator,支持注解式校验。
- 场景:表单提交、接口调用的参数校验,如必填字段、格式校验、值范围限制等。
- 使用步骤:
1.导入validation坐标
2.在参数上添加注解(例如@pattern),指定校验规则
3.在Controller类上添加@Validated注解
4.在全局异常处理器中处理参数校验失败异常
使用后:
2.参数校验的基本用法
2.1导入依赖
Spring Boot 内置了 Bean Validation,但需要引入相关依赖(如果未自动导入):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.2基本校验注解
常用注解及其作用:
2.3控制器中的参数校验
在控制器方法中添加校验注解:
import jakarta.validation.constraints.*;
public class UserDTO {
@NotNull(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度必须在3到20之间")
private String username;
@NotBlank(message = "邮箱不能为空")
@Email(message = "邮箱格式不正确")
private String email;
@Min(value = 18, message = "年龄不能小于18岁")
@Max(value = 100, message = "年龄不能超过100岁")
private Integer age;
// Getters and Setters
}
在控制器中接收并校验参数:
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
@PostMapping
public String createUser(@RequestBody @Valid UserDTO userDTO) {
return "用户创建成功: " + userDTO.getUsername();
}
}
3.全局异常处理
当校验失败时,Spring 会抛出异常(如 MethodArgumentNotValidException
)。可以通过 全局异常处理 返回友好的错误信息。
3.1 自定义异常处理器
使用 @ControllerAdvice
捕获校验异常:
package com.itzx.springbootconfigfile.exception;
import com.itzx.springbootconfigfile.pojo.Result;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e){
e.printStackTrace();
return Result.error(StringUtils.hasLength(e.getMessage())?e.getMessage():"操作失败");
}
}
3.2 响应示例
当校验失败时,返回类似的 JSON:
{
"username": "用户名长度必须在3到20之间",
"email": "邮箱格式不正确"
}
4. 分组校验
分组校验允许根据场景应用不同的校验规则。
4.1 定义校验组
public interface CreateGroup {}
public interface UpdateGroup {}
4.2 应用分组校验
public class UserDTO {
@NotNull(message = "用户ID不能为空", groups = UpdateGroup.class)
private Long id;
@NotNull(message = "用户名不能为空", groups = CreateGroup.class)
@Size(min = 3, max = 20, message = "用户名长度必须在3到20之间")
private String username;
}
4.3 控制器中使用分组
@PostMapping
public String createUser(@RequestBody @Validated(CreateGroup.class) UserDTO userDTO) {
return "用户创建成功";
}
@PutMapping
public String updateUser(@RequestBody @Validated(UpdateGroup.class) UserDTO userDTO) {
return "用户更新成功";
}
5. 最佳实践
- 细化校验规则:根据业务需求精细设计注解和分组。
- 前后端配合:校验规则应在后端与前端保持一致。
- 避免过度校验:对非关键性字段,校验规则不要过于复杂。
- 全局异常捕获:提升用户体验。
6. 总结
Spring Boot 提供了一套强大的参数校验机制,集成了标准的 JSR 380 和自定义能力,适用于各种业务场景。从简单校验到分组校验,再到自定义注解,开发者可以轻松实现符合业务需求的参数校验逻辑。通过合理的异常处理和分组应用,可以进一步提高系统的健壮性和用户体验。
原文地址:https://blog.csdn.net/m0_74004434/article/details/143808375
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!