Spring Boot系列(四) Spring Boot 之验证

博客介绍了JSR 303 (Bean Validation)相关内容,包括Maven依赖,Spring Boot 1.4开始的命名规则;使用时在请求参数加注解,还提及Spring的API断言和Java关键字断言,可通过拦截或AOP避免断言耦合;最后阐述自定义验证逻辑,如定义注解、实现验证等。

这节没有高深的东西, 但有一些学习思路值得借鉴.

JSR 303 (Bean Validation)

Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Spring Boot 1.4 开始提出命名规则, 官方使用spring-boot-starter-${name} , 三方使用 {name}-spring-boot-starter.

使用

一般只需要在需要验证的请求参数加 @Valid 即可. 对于通用的验证 annotation 如 @NotNull , @Max 等, 不需要做任何其他操作.

Spring 也提供了 API 形式的断言, 如 Assert.hasText(user.getName(),"字段值不能为空")

Java 的断言有专门的关键字, 如 assert user.getId()>1000

断言耦合了业务逻辑. 避免耦合可以使用 HandlerIntercepter 或者 Filter 做拦截. 也可以使用 AOP 切面来完成. 但上述均不是统一的标准实现.

自定义验证逻辑

参考 Spring 已经实现的其他验证逻辑.

  1. 定义注解
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface Card {
  1. 理解注解上的 @Constraint,

  2. 实现 public interface ConstraintValidator<A extends Annotation, T>

为什么不建议使用 String.split()? 因为其使用了正则, 其次容易出异常. 建议使用三方封装. 可以使用StringUtils.delimitedListToStringArray() 或 commons-lang3包的 StringUtils 或使用 JDK 的 StringTokenizer.

  1. 注解 Card 上修改 @Constraint(validatedBy = { CardValidation }) 指定验证的类.

  2. 通过定义类似 String message() default "{javax.validation.constraints.DecimalMax.message}"; 可以实现国际化.

转载于:https://www.cnblogs.com/walkinhalo/p/10826996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值