【java】[validation校验]----《Spring Boot 3 整合 Validation:注解使用、全局异常处理与自定义校验》

一 、【Boot 3 整合 Validation】

在 Spring Boot 应用开发中,请求参数校验是保障数据合法性的重要环节。本文将详细介绍如何在 Spring Boot 3 项目中整合 Validation 框架,包括依赖配置、注解使用、全局异常处理及自定义校验规则等内容,帮助开发者快速实现健壮的数据校验功能。

1. 添加依赖

Spring Boot 3 对 Validation 的支持与 Spring Boot 2 有所不同,主要体现在依赖和底层实现上:

  • Spring Boot 3 基于 Jakarta EE 9+,使用jakarta.validation包而非javax.validation
  • 依然默认使用 Hibernate Validator 作为实现,但版本要求更高(通常为 8.x 及以上)
    首先需要在pom.xml中添加 Validation 相关依赖:
<!-- Spring Boot Validation starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

该依赖会自动引入:

  • Jakarta Validation API(jakarta.validation:jakarta.validation-api)
  • Hibernate Validator 8.x(org.hibernate.validator:hibernate-validator)
  • Spring 与 Validation 的整合组件

无需单独引入 Hibernate Validator,避免版本冲突。

2. 创建实体类(并添加校验注解)

在实体类字段上添加校验注解,注意 Spring Boot 3 使用的是jakarta.validation包下的注解:

package com.example.demo.entity;
import jakarta.validation.constraints.*;
import java.io.Serializable;
public class User implements Serializable {
   
   
    
    private Long id;

    @NotBlank(message = "用户名不能为空")
    @Size(min = 2, max = 20, message = "用户名长度必须在2-20个字符之间")
    private String username;
    
    @NotBlank(message = "密码不能为空")
    @Pattern(regexp = "^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@#$%^&*])[a-zA-Z0-9@#$%^&*]{8,16}$", 
             message = "密码必须包含字母、数字和特殊字符,长度8-16位")
    private String password;
    
    @NotNull(message = "年龄不能为空")
    @Min(value = 18, message = "年龄不能小于18岁")
    @Max(value = 120, message = "年龄不能大于120岁")
    private Integer age;
    
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;
    // getter和setter方法 或使用注解lombok
}

3. 全局异常处理

异常处理说明:
1.MethodArgumentNotValidException:处理@RequestBody参数的校验异常
2.ConstraintViolationException:处理路径变量、请求参数(@RequestParam)的校验异常
3.通过@ResponseStatus指定 HTTP 状态码为 400(Bad Request)
4.统一返回格式,包含错误代码、提示信息和具体错误字段

package com.example.demo.exception;

import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;
import java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值