Spring Boot 中自定义数据校验注解

Spring Boot 中自定义数据校验注解

在 Spring Boot 中,我们可以使用 JSR-303 数据校验规范来校验表单数据的合法性。JSR-303 提供了一些常用的数据校验注解,例如 @NotNull@NotBlank@Size 等。但是,在实际开发中,我们可能需要自定义数据校验注解来满足特定的需求。本文将介绍如何在 Spring Boot 中自定义数据校验注解,并提供示例代码来演示它的用法。

在这里插入图片描述

自定义校验注解

在 Spring Boot 中,我们可以通过定义注解并使用 @Constraint 注解来自定义数据校验注解。下面是一个自定义的注解 @ZipCode,用于校验邮政编码是否合法:

@Target({
    
    ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ZipCodeValidator.class)
public @interface ZipCode {
    
    

    String message() default "Invalid zip code";

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

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

    @Target({
    
    ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface List {
    
    
        ZipCode[] value();
    }
}

在上面的代码中,我们使用了 @Constraint 注解来指示该注解需要使用 ZipCodeValidator 类进行校验。@Constraint 注解中的参数含义如下:

  • validatedBy:指示使用哪个类进行校验。
  • message:校验失败时返回的消息。
  • groups:校验分组。
  • payload:校验负载。

在注解中,我们定义了一个 ZipCodeValidator.List 内部注解,用于支持多个 @ZipCode 注解的使用。

自定义校验器

在自定义校验注解后,我们还需要实现校验器。下面是一个 ZipCodeValidator 校验器的示例代码:

public class ZipCodeValidator implements ConstraintValidator<ZipCode, String> {
    
    

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
    
    
        if (value == null) {
    
    
            return true;
        }
        Pattern pattern = Pattern.compile("\\d{5}");
        Matcher matcher = pattern.matcher(value);
        return matcher.matches();
    }
}

在上面的代码中,我们实现了 ConstraintValidator<ZipCode, String> 接口,并重写了 isValid 方法。isValid 方法用于实际校验逻辑。在本例中,我们使用正则表达式验证邮政编码是否符合 5 位数字的格式。

使用自定义校验注解

在定义自定义校验注解和校验器后,我们可以在 Java 对象中使用自定义校验注解。下面是一个示例代码:

public class Address {
    
    

    @ZipCode
    private String zipCode;

    // 省略 getter 和 setter 方法
}

在上面的代码中,我们在 Address 类的 zipCode 属性上使用了 @ZipCode 注解。在使用时,我们不需要指定 message 参数,因为该参数已经在 @ZipCode 注解中指定。

在控制器中,我们可以使用 @Valid 注解来指示需要校验的对象。例如:

@RestController
@RequestMapping("/addresses")
public class AddressController {
    
    

    @PostMapping
    public ResponseEntity<?> createAddress(@Valid @RequestBody Address address) {
    
    
        // 创建地址
        return ResponseEntity.ok().build();
    }
}

在上面的示例代码中,我们使用了 @Valid 注解来指示需要校验 RequestBody 中的 Address 对象。如果校验失败,Spring Boot 将自动返回一个包含错误信息的响应。

总结

在本文中,我们介绍了在 Spring Boot 中自定义数据校验注解的方法,并提供了示例代码来演示它的用法。使用自定义校验注解可以帮助我们满足特定的数据校验需求,从而提高 Web 应用的安全性和可靠性。如果您在开发 Web 应用程序时需要进行数据校验,并且默认的数据校验注解无法满足您的需求,请务必考虑使用自定义校验注解的方法。

猜你喜欢

转载自blog.csdn.net/2302_77835532/article/details/131326452