最近在看spring boot的文档(http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/),里面提到了使用@Valid 参数验证,这个注解比较实用,这里介绍一下如何在spring-boot中使用:
import javax.validation.Valid;
import com.framework.core.valid.ValidatorResultHandler;
import org.springframework.validation.BindingResult;
public Boolean save( @RequestBody @Valid UserInfo UserInfo,
BindingResult br){
ValidatorResultHandler.handle(br);
....//省略若干代码
这里注意我们要检查的是自己封装的userInfo中的属性,这里需要对userInfo进行配置,这里需要使用注解下面对注解进行介绍:
实际例子:
@size (min=3, max=20, message=”用户名长度只能在3-20之间”)
@size (min=6, max=20, message=”密码长度只能在6-20之间”)
@pattern (regexp=”[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\.[a-za-z]{2,4}”, message=”邮件格式错误”)
@Length(min = 5, max = 20, message = “用户名长度必须位于5到20之间”)
@Email(message = “比如输入正确的邮箱”)
@NotNull(message = “用户名称不能为空”)
@Max(value = 100, message = “年龄不能大于100岁”)
@Min(value= 18 ,message= “必须年满18岁!” )
@AssertTrue(message = “bln4 must is true”)
@AssertFalse(message = “blnf must is falase”)
@DecimalMax(value=”100”,message=”decim最大值是100”)
@NotNull(message = “身份证不能为空”)
@Pattern(regexp=”^(\d{18,18}|\d{15,15}|(\d{17,17}[x|X]))$”, message=”身份证格式错误”)
Demo实例:
public class userInfo{
@NotEmpty(message="姓名不能为空")
private String name;
@NotEmpty(message="密码不能为空")
@Length(min=6,message="密码长度不能小于6位")
private String password;
//省略get set
}
这里特别介绍一下我们封住的ValidatorResultHandler类:
public class ValidatorResultHandler {
public ValidatorResultHandler() {
}
public static void handle(BindingResult result) {
if(result.hasErrors()) {
String message = "";
List list = result.getAllErrors();
ObjectError objectError;
for(Iterator i$ = list.iterator(); i$.hasNext(); message = message + objectError.getDefaultMessage() + "; ") {
objectError = (ObjectError)i$.next();
}
throw new BusinessException(ReturnType.ParamIllegal, message);
}
}
ReturnType 类:
public enum ReturnType {
Success("0", "成功"),
Error("-1", "错误"),
Unknown("50", "未知异常"),
//省略....
private String code;
private String type;
private ReturnType(String code, String type) {
this.code = code;
this.type = type;
}
public String getCode() {
return this.code;
}
public String getType() {
return this.type;
}
}
做一下补充,之前讲了如何验证自己封装的bean,还有对基础类型进行验证呢?
@Service
@Validated
public class MyBean {
public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,
Author author) {
...
}
}
先到这里吧,有更好的方案望指正.