Spring Boot系列(四) Spring Boot 之验证
这节没有高深的东西, 但有一些学习思路值得借鉴.
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 已经实现的其他验证逻辑.
- 定义注解
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface Card {
理解注解上的
@Constraint
,实现
public interface ConstraintValidator<A extends Annotation, T>
为什么不建议使用
String.split()
? 因为其使用了正则, 其次容易出异常. 建议使用三方封装. 可以使用StringUtils.delimitedListToStringArray()
或 commons-lang3包的StringUtils
或使用 JDK 的StringTokenizer
.
注解
Card
上修改@Constraint(validatedBy = { CardValidation })
指定验证的类.通过定义类似
String message() default "{javax.validation.constraints.DecimalMax.message}";
可以实现国际化.
最新文章
- .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系
- jquery_ui_api中文
- BZOJ2171——K凹凸序列
- FastJSON 之bean列表转换为JSON
- I/B/P SP/SI
- phpinfo中查不到memcache信息问题
- Android之项目推荐使用的第三方库
- 动态引入Js文件
- HDU4526威威猫系列故事——拼车记(DP)
- UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<;Problem M>;
- Sql Server trace flags
- [译] AR SDK的种类比你想得要多!这里介绍七个棒棒哒
- C#细说多线程
- 小白的首个maven web项目Step1软件安装三(8.0.15mysql及workbench安装)
- ES5-ES6-ES7_字符串与JOSN格式的数据相互转换以及深度克隆新对象
- faster rcnn 做识别
- Android-Java-封装
- C#读写基恩士PLC 使用TCP/IP 协议 MC协议
- Directly output the object name
- (Spring Boot框架)快速入门