您现在的位置是:首页 > 编程 > 

【详解】SpringBootValidator校验相关的注解信息

2025-07-29 10:25:41
【详解】SpringBootValidator校验相关的注解信息 Spring Boot Validator校验相关的注解信息在开发Web应用时,数据校验是一个非常重要的环节。Spring Boot 提供了强大的校验机制,帮助开发者轻松实现对请求参数的校验。本文将详细介绍Spring Boot中常用的校验注解及其用法。1. 基础环境配置在开始之前,确保你的Spring Boot项目中已经添加了​​

【详解】SpringBootValidator校验相关的注解信息

Spring Boot Validator校验相关的注解信息

在开发Web应用时,数据校验是一个非常重要的环节。Spring Boot 提供了强大的校验机制,帮助开发者轻松实现对请求参数的校验。本文将详细介绍Spring Boot中常用的校验注解及其用法。

1. 基础环境配置

在开始之前,确保你的Spring Boot项目中已经添加了​​spring-boot-starter-validation​​依赖。如果你使用的是Maven,可以在​​pom.xml​​文件中添加如下依赖:

代码语言:javascript代码运行次数:0运行复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 常用校验注解

2.1 @otull
  • 作用:验证对象是否不为空。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@otull(message = "name cannot be null")
private String name;
2.2 @otEmpty
  • 作用:验证集合、数组、字符串等是否不为空且长度大于0。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@otEmpty(message = "list cannot be empty")
private List<String> items;
2. @otBlank
  • 作用:验证字符串是否不为空且去掉首尾空格后长度大于0。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@otBlank(message = "description cannot be blank")
private String description;
2.4 @Size
  • 作用:验证字符串、集合、数组等的大小是否在指定范围内。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@Size(min = 5, max = 10, message = "name size must between 5 and 10")
private String name;
2.5 @Min 和 @Max
  • 作用:验证数值是否在指定范围内。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@Min(value = 18, message = "age must be at least 18")
@Max(value = 100, message = "age must be at most 100")
private int age;
2.6 @DecimalMin 和 @DecimalMax
  • 作用:验证小数是否在指定范围内。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@DecimalMin(value = "0.0", message = "price must be at least 0.0")
@DecimalMax(value = "1000.0", message = "price must be at most 1000.0")
private double price;
2.7 @Pattern
  • 作用:验证字符串是否符合正则表达式。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@Pattern(regexp = "^[a-zA-Z0-9]+$", message = "username must contain only letters and numbers")
private String username;
2.8 @Email
  • 作用:验证字符串是否为有效的地址。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@Email(message = "email is not valid")
private String email;
2.9 @AssertTrue 和 @AssertFalse
  • 作用:验证布尔值是否为真或假。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@AssertTrue(message = "terms must be accepted")
private boolean termsAccepted;

@AssertFalse(message = "isDeleted must be false")
private boolean isDeleted;
2.10 @Future 和 @Past
  • 作用:验证日期是否在未来或过去。
  • 示例
代码语言:javascript代码运行次数:0运行复制
@Future(message = "event date must be in the future")
private Date eventDate;

@Past(message = "birth date must be in the past")
private Date birthDate;

. 自定义校验注解

除了上述内置的校验注解外,Spring Boot还支持自定义校验注解。通过实现​​CtraintValidator​​接口,可以创建自己的校验逻辑。

.1 创建自定义注解
代码语言:javascript代码运行次数:0运行复制
@Ctraint(validatedBy = )
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUTIME)
public @interface MyCustomAnnotation {
    String message() default "custom validation failed";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
.2 实现校验逻辑
代码语言:javascript代码运行次数:0运行复制
public class MyCustomValidator implements CtraintValidator<MyCustomAnnotation, String> {

    @Override
    public void initialize(MyCustomAnnotation ctraintAnnotation) {
        // 初始化逻辑
    }

    @Override
    public boolean isValid(String value, CtraintValidatorContext context) {
        // 校验逻辑
        return value != null && value.startsWith("custom");
    }
}
. 使用自定义注解
代码语言:javascript代码运行次数:0运行复制
public class User {
    @MyCustomAnnotation(message = "username must start with 'custom'")
    private String username;
}

4. 校验控制器参数

在Spring Boot中,可以通过​​@Valid​​和​​@Validated​​注解来校验控制器参数。

4.1 使用@Valid
代码语言:javascript代码运行次数:0运行复制
@PostMapping("/users")
public RespeEntity<User> createUser(@Valid @RequestBody User user) {
    // 处理逻辑
    return (user);
}
4.2 使用@Validated
代码语言:javascript代码运行次数:0运行复制
@RestController
@RequestMapping("/users")
@Validated
public class UserController {

    @PostMapping
    public RespeEntity<User> createUser(@Valid @RequestBody User user) {
        // 处理逻辑
        return (user);
    }
}

5. 处理校验错误

当校验失败时,Spring Boot会抛出​​MethodArgumentotValidException​​异常。你可以通过全局异常处理器来处理这些异常,并返回友好的错误信息。

代码语言:javascript代码运行次数:0运行复制
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler()
    public RespeEntity<Map<String, String>> handleValidationExcepti(MethodArgumentotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldame = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldame, errorMessage);
        });
        return RespeEntity.badRequest().body(errors);
    }
}

Spring Boot提供的校验机制非常强大且易于使用。通过合理的使用内置注解和自定义注解,可以有效提升应用的数据校验能力,减少潜在的错误。希望本文能帮助你在实际项目中更好地应用这些校验注解。


在Spring Boot中,​​@Valid​​​ 和 ​​@Validated​​​ 注解用于数据校验,而 ​​javax.validation​​​ 包中的注解(如 ​​@otull​​​, ​​@otEmpty​​​, ​​@Size​​ 等)则用于具体的字段校验。下面是一个实际的应用场景示例,展示如何在Spring Boot中使用这些注解进行数据校验。

示例场景

一个用户注册功能,需要对用户的输入进行校验。具体要求如下:

  • 用户名不能为空,且长度在到20个字符之间。
  • 邮箱地址必须是有效的邮箱格式。
  • 密码不能为空,且长度至少为8个字符。
实体类

首先,定义一个用户实体类 ​​User​​,并在字段上添加校验注解:

代码语言:javascript代码运行次数:0运行复制
import javax.Email;
import javax.otEmpty;
import javax.Size;

public class User {

    @otEmpty(message = "用户名不能为空")
    @Size(min = , max = 20, message = "用户名长度必须在到20个字符之间")
    private String username;

    @Email(message = "邮箱地址格式不正确")
    private String email;

    @otEmpty(message = "密码不能为空")
    @Size(min = 8, message = "密码长度至少为8个字符")
    private String password;

    // Getters and Setters
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
         = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
控制器

接下来,在控制器中使用 ​​@Valid​​ 注解来校验请求参数,并处理校验错误:

代码语言:javascript代码运行次数:0运行复制
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;

@RestController
public class UserController {

    @PostMapping("/register")
    public String register(@Valid @RequestBody User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return bindingResult.getAllErrors().stream()
                    .map(ObjectError::getDefaultMessage)
                    .collect(Collectors.joining(", "));
        }
        // 处理注册逻辑
        return "注册成功";
    }
}
配置类

为了使校验消息更加友好,可以配置一个全局异常处理器来统一处理校验错误:

代码语言:javascript代码运行次数:0运行复制
import org.springframework.http.HttpStatus;
import org.springframework.http.RespeEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RespeStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @RespeStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler()
    public Map<String, String> handleValidationExcepti(MethodArgumentotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldame = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldame, errorMessage);
        });
        return errors;
    }
}
测试

启动应用后,可以通过POST请求测试注册功能。例如,使用Postman发送以下请求:

代码语言:javascript代码运行次数:0运行复制
{
    "username": "john",
    "email": "john@example",
    "password": "password12"
}

如果输入不符合校验规则,将返回相应的错误信息,例如:

代码语言:javascript代码运行次数:0运行复制
{
    "username": "用户名长度必须在到20个字符之间",
    "password": "密码长度至少为8个字符"
}

通过这种方式,你可以轻松地在Spring Boot应用中实现数据校验,确保输入数据的有效性和完整性。在Spring Boot中,使用​​@Valid​​和​​@Validated​​等注解可以对控制器方法的参数进行数据校验。这些校验通常通过JSR 80(Bean Validation 2.0)标准来实现,Spring Boot默认集成了Hibernate Validator作为其实现。

下面是一些常用的校验注解及其用法:

常用的校验注解
  1. @otull
  • 确保字段不为null。
  • 示例:​​@otull private String name;​
  1. @otEmpty
  • 确保字段不为null且不为空字符串(对于集合类型,确保集合不为空)。
  • 示例:​​@otEmpty private String name;​
  1. @otBlank
  • 确保字段不为null且不为空字符串(去除前后空格后)。
  • 示例:​​@otBlank private String name;​
  1. @Size(min=, max=)
  • 确保字段的长度在指定范围内。
  • 示例:​​@Size(min=5, max=10) private String name;​
  1. @Min(value)
  • 确保字段的值大于或等于指定的最小值。
  • 示例:​​@Min(18) private int age;​
  1. @Max(value)
  • 确保字段的值小于或等于指定的最大值。
  • 示例:​​@Max(100) private int age;​
  1. @DecimalMin(value)
  • 确保字段的值大于或等于指定的最小值(适用于浮点数)。
  • 示例:​​@DecimalMin("18.5") private double height;​
  1. @DecimalMax(value)
  • 确保字段的值小于或等于指定的最大值(适用于浮点数)。
  • 示例:​​@DecimalMax("190.5") private double height;​
  1. @Pattern(regexp)
  • 确保字段的值符合指定的正则表达式。
  • 示例:​​@Pattern(regexp="^[a-zA-Z0-9]+$") private String username;​
  1. @Email
  • 确保字段的值是一个有效的地址。
  • 示例:​​@Email private String email;​
示例代码

假设我们有一个用户注册的接口,需要对用户的姓名、年龄和邮箱进行校验。

实体类
代码语言:javascript代码运行次数:0运行复制
import javax.*;

public class User {

    @otBlank(message = "ame must not be blank")
    private String name;

    @Min(value = 18, message = "Age must be at least 18")
    @Max(value = 100, message = "Age must be at most 100")
    private int age;

    @Email(message = "Email must be valid")
    private String email;

    // Getters and Setters
}
控制器
代码语言:javascript代码运行次数:0运行复制
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public String createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return bindingResult.getAllErrors().stream()
                .map(ObjectError::getDefaultMessage)
                .collect(Collectors.joining(", "));
        }
        // 处理用户创建逻辑
        return "User created successfully";
    }
}
解释
  1. 实体类 User​:
  • ​@otBlank​​ 确保 ​​name​​ 字段不为空且不只包含空格。
  • ​@Min​​ 和 ​​@Max​​ 确保 ​​age​​ 字段在18到100之间。
  • ​@Email​​ 确保 ​​email​​ 字段是一个有效的地址。
  1. 控制器 UserController​:
  • ​@Valid​​ 注解用于触发对 ​​User​​ 对象的校验。
  • ​BindingResult​​ 对象用于捕获校验错误,并返回给客户端。

通过这种方式,你可以在Spring Boot应用中轻松地实现输入参数的校验,提高应用的健壮性和用户体验。

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1185734.html

相关标签:无
上传时间: 2025-07-22 10:55:15
留言与评论(共有 6 条评论)
本站网友 精油品牌
8分钟前 发表
并处理校验错误:代码语言:javascript代码运行次数:0运行复制import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController public class UserController { @PostMapping("/register") public String register(@Valid @RequestBody User user
本站网友 晚上好
0秒前 发表
且长度至少为8个字符
本站网友 s40软件下载
15分钟前 发表
年龄和邮箱进行校验
本站网友 破解网
17分钟前 发表
"password"
本站网友 国内游
6分钟前 发表
​​@Size​​ 等)则用于具体的字段校验