前言:
在技术选型上纠结了下,最后还是觉得这东西也不复杂,自己写比较爽,跟自己的系统结合更顺畅一点。于是模仿JSR303自己写了一套。
使用方法
1. maven引入:
<dependency>
<groupId>com.cargopm</groupId>
<artifactId>util</artifactId>
<version>2.0.1-SNAPSHOT</version>
</dependency>
2. Spring配置:
请先确保引入aop schema:
配置拦截器:
...
<aop:aspectj-autoproxy/>
<bean class="com.cargopm.util.rest.CtrlParamValidInterceptor" />
...
3. 对象中的字段加上注解
import com.cargopm.util.validator.*;
@CanValidate
public class UserVO {
@NotBlank(msg = "名字不能为空")
private String name;
@NotBlank
private String nickname;
@NotNull
private String title;
@Max(value = 200, msg = "年龄不能超过200")
@Min(value = 0)
private Integer age;
@Pattern(value = ".*(?=.{6,})(?=.*\\d)(?=.*[a-zA-Z]).*", msg = "密码必须是大于6位且必须带1个英文和1个数字")
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
注意:对象上必须加上@CanValidate注解
4. Ctrl方法加上注解
@RequestMapping("/registTest.gou")
@ResponseBody
@ParamCheck
public RestResult register(UserVO user){
RestResult result = new RestResult();
// 一堆业务逻辑处理 略
return result;
}
方法加了@ParamCheck注解后,会被拦截器拦截,并自动检查传入参数,对@CanValidate注解的参数进行检查
注意:返回的对象必须实现IResult接口,我们统一ctrl层的返回格式。
IResult:
package com.cargopm.util.rest;
public interface IResult{
void setSuccess(Boolean success);
Boolean getSuccess();
void setErrorCode(String errorCode);
String getErrorCode();
void setContent(Object content);
Object getContent();
void setErrorMsg(String errorMsg);
String getErrorMsg();
}
试试!
在非ctrl方法中使用
public static void main(String[] args) {
UserVO user = new UserVO();
user.setAge(201);
user.setPassword("a111");
ValidResult validResult = new BeanValidator().valid(user);
System.out.println("hasErrors:"+validResult.hasErrors());
System.out.println("errMsgs:"+validResult.getErrMsgs());
}
字段验证注解说明
注解 | 属性&说明 |
---|---|
@NotBlank | 用于验证字符串是否为空或空格,只能应用于String类型的字段 |
@NotNull | 用于验证属性是否为null, 适用于所有类型的字段 |
@Max | 用于验证数字的最大值,只能用于数字字段,必须设置value属性 |
@Min | 用于验证数字的最小值,只能用于数字字段,必须设置value属性 |
@Size | 用于验证字符串的长度,只能用于String类型的字段,可以设置min和max属性 |
@Pattern | 用于正则表达式验证 |
所有注解都可以设置msg属性,作为错误描述,暂时只写了这几个验证,目前应该能满足需求,不够的话后面再加。