手把手教你利用Spring Boot实现各种参数校验

本文详细讲解了如何在Spring Boot中利用@Validated和@Valid进行请求参数校验,包括requestBody和requestParam/PathVariable参数的校验,以及统一异常处理、分组校验、嵌套校验、集合校验、自定义校验和编程式校验等进阶用法。同时,介绍了Spring Validation的实现原理。
摘要由CSDN通过智能技术生成

前言

本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理,死磕到底!

简单使用

Java API规范 (JSR303) 定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如@Email、@Length等。Spring Validation是对hibernate validation的二次封装,用于支持spring mvc参数自动校验。接下来,我们以spring-boot项目为例,介绍Spring Validation的使用。

引入依赖

如果spring-boot版本小于2.3.x,spring-boot-starter-web会自动传入hibernate-validator依赖。如果spring-boot版本大于2.3.x,则需要手动引入依赖:

<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-validator</artifactId>  
    <version>6.0.1.Final</version>  
</dependency>  

对于web服务来说,为防止非法参数对业务造成影响,在Controller层一定要做参数校验的!大部分情况下,请求参数分为如下两种形式:

  1. POST、PUT请求,使用requestBody传递参数;
  2. GET请求,使用requestParam/PathVariable传递参数。

下面我们简单介绍下requestBody和requestParam/PathVariable的参数校验实战!

**requestBody**参数校验

POST、PUT请求一般会使用requestBody传递参数,这种情况下,后端使用** DTO 对象**进行接收。**只要给 DTO 对象加上@Validated注解就能实现自动参数校验**。比如,有一个保存User的接口,要求userName长度是2-10,account和password字段长度是6-20。如果校验失败,会抛出
MethodArgumentNotValidException异常,Spring默认会将其转为400(Bad Request)请求。

DTO 表示数据传输对象(Data Transfer Object),用于服务器和客户端之间交互传输使用的。在 spring-web 项目中可以表示用于接收请求参数的Bean对象。

  • **DTO**字段上声明约束注解
@Data  
public class UserDTO {  
  
    private Long userId;  
  
    @NotNull  
    @Length(min = 2, max = 10)  
    private String userName;  
  
    @NotNull  
    @Length(min = 6, max = 20)  
    private String account;  
  
    @NotNull  
    @Length(min = 6, max = 20)  
    private String password;  
}  
  • 在方法参数上声明校验注解
@PostMapping("/save")  
public Result saveUser(@RequestBody @Validated UserDTO userDTO) {  
  
    return Result.ok();  
}  

这种情况下,使用**@Valid@Validated**都可以

**requestParam/PathVariable**参数校验

GET请求一般会使用requestParam/PathVariable传参。如果参数比较多 (比如超过 6 个),还是推荐使用DTO对象接收。否则,推荐将一个个参数平铺到方法入参中。在这种情况下,**必须在Controller类上标注@Validated注解,并在入参上声明约束注解 (如@Min等)**。如果校验失败,会抛出
ConstraintViolationException异常。代码示例如下:

@RequestMapping("/api/user")  
@RestController  
@Validated  
public class UserController {  
  
    @GetMapping("{userId}")  
    public Result detail(@PathVariable("userId") @Min(10000000000000000L) Long userId) {  
  
        UserDTO userDTO = new UserDTO();  
        userDTO.setUserId(userId);  
        userDTO.setAccount("11111111111111111");  
        userDTO.setUserName("xixi");  
        userDTO.setAccount("11111111111111111");  
        return Result.ok(userDTO);  
    }  
  
    @GetMapping("getByAccount")  
    public Result getByAccount(@Length(min = 6, max = 20) @NotNull String  account) {  
  
        UserDTO userDTO = new UserDTO(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Spring Boot 3 开发一个前后端分离的生产级系统需要以下步骤: 第一步:环境准备 1. 安装 Java 开发工具包(JDK) 2. 安装集成开发环境(IDE),如Eclipse或IntelliJ IDEA 3. 安装Maven构建工具 4. 安装数据库(如MySQL)和相关工具(如MySQL Workbench) 第二步:创建后端项目 1. 使用IDE创建一个新的Spring Boot项目 2. 配置项目的基本信息,如项目名称、包名等 3. 添加必要的依赖,如Spring Boot Starter Web、Spring Data JPA等 4. 定义实体类、控制器、服务等后端代码 第三步:创建前端项目 1. 使用前端开发工具,如Vue.js或React.js,创建一个新的前端项目 2. 配置项目的基本信息,如项目名称、包名等 3. 定义前端路由、页面、组件等前端代码 第四步:前后端集成 1. 在后端项目中配置跨域访问,允许前端项目访问后端接口 2. 在前端项目中调用后端接口,实现数据的交互 第五步:开发和测试 1. 根据需求逐步开发后端和前端功能模块 2. 使用测试框架,如JUnit和Selenium,对系统进行单元测试和端到端测试 第六步:部署和上线 1. 打包后端项目为可执行的JAR文件 2. 部署JAR文件到生产环境的服务器上 3. 配置服务器的环境变量、数据库连接等 4. 启动服务器,验证系统是否正常运行 通过以上步骤,我们可以完成一个使用Spring Boot 3开发的前后端分离的生产级系统。这种架构可以提高开发效率、降低系统耦合性,并且适合大型项目的开发和部署。同时,我们还可以根据实际需求,进一步优化系统性能、可维护性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值