Spring Boot 中自定义中文校验注解的实现

夏日蝉鸣 2024-03-26 ⋅ 31 阅读

引言

在实际开发中,我们经常需要对用户输入的数据进行校验,以保证数据的合法性和安全性。Spring Boot提供了一系列注解(如@NotNull、@Min、@Max等)来进行数据校验。然而,这些注解只支持对英文字符串进行校验,对中文字符串的校验支持不够友好。本篇博文将介绍如何在Spring Boot中自定义中文校验注解,以提高开发效率和用户体验。

实现步骤

步骤1:添加相关依赖

在Maven或Gradle中添加以下依赖,以使用Spring Boot的校验功能和自定义注解的支持。

<dependencies>
    <!-- Spring Boot Validation -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <!-- Hibernate Validator -->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
</dependencies>

步骤2:创建中文校验注解

在项目的src/main/java目录下创建一个新的包com.example.validation,然后在该包下创建一个新的类ChineseString.java,代码如下:

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = ChineseStringValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface ChineseString {

    String message() default "请输入合法的中文字符串";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

步骤3:创建中文校验注解的校验器

com.example.validation包下创建一个新的类ChineseStringValidator.java,代码如下:

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Pattern;

public class ChineseStringValidator implements ConstraintValidator<ChineseString, String> {

    private static final Pattern CHINESE_PATTERN = Pattern.compile("[\u4e00-\u9fa5]+");

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) {
            return true;
        }
        return CHINESE_PATTERN.matcher(value).matches();
    }
}

步骤4:使用自定义注解进行中文校验

在需要进行中文校验的实体类的属性上添加@ChineseString注解,示例代码如下:

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;

public class User implements Serializable {

    @NotEmpty(message = "用户名不能为空")
    @ChineseString(message = "用户名必须为中文")
    private String username;

    // 省略 getter 和 setter 方法
}

步骤5:控制器方法参数校验

在控制器的方法参数中添加@Valid注解,以启用参数校验,示例代码如下:

import org.springframework.validation.annotation.Validated;
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
@Validated
public class UserController {

    @PostMapping("/users")
    public void createUser(@Valid @RequestBody User user) {
        // 处理用户创建逻辑
    }
}

结语

通过自定义中文校验注解,我们可以更方便、更友好地对中文字符串进行校验,提高了代码的可读性和开发效率。同时,Spring Boot的校验功能也使得我们能够在前后端交互中减少一些不必要的沟通和错误。希望本篇博文对您有所帮助,感谢阅读!

参考链接:


全部评论: 0

    我有话说: