共三个步骤:
一、pom.xm新增:
<!--使用JRS-303校验数据-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.3.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.1.GA</version>
</dependency>
二、配置切面编程Aspect
2.1新建切面处理类,见附件1:ValidAspect 类
2.2.springmvc-servlet.xml中添加如下:
<!--切面开启-->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
三、在controller层加入注释:如下
3.1参数加标记符如下:
/**
* Created by linzetian on 2016/11/10.
* Description:登录信息
*/
public classLogin
{
@NotNull(message="登录名不能为空")
privateStringname;//登录名
@NotNull(message="密码不能为空")
privateStringpassword;//密码
publicStringgetName()
{
returnname;
}
public
void setName(String name) {
this.name=
name;
}
publicStringgetPassword()
{
returnpassword;
}
public
void setPassword(String password) {
this.password=
password;
}
}
3.2 在controller层加标记符如下:
@ResponseBody
publicResultlogin(@RequestBody
@Valid Login bean,BindingResult
result){
return
new Result().success("操作成功");
}
注意:@Valid
注释表示要校验的参数,其后必须跟BindingResult变量
附件:
===============附件1:ValidAspect 类
packagecom.tecsun.das.collect.common.aspect;
importcom.tecsun.das.collect.common.result.RESULT_CODES;
importcom.tecsun.das.collect.common.result.Result;
importcom.tecsun.das.collect.common.util.StringUtils;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.Around;
importorg.aspectj.lang.annotation.Aspect;
importorg.aspectj.lang.reflect.MethodSignature;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
importorg.springframework.validation.BindingResult;
importorg.springframework.validation.ObjectError;
importjavax.validation.Valid;
importjavax.xml.validation.Validator;
importjava.lang.annotation.Annotation;
importjava.lang.reflect.Method;
/**
* Created by linzetian on 2016/11/10.
* Description:controller层校验切面类
*主要用户校验数据
*/
@Component
@Aspect
public classValidAspect
{
/**
*含ResponseBody标识的方法进入切面编程
*@parampjp
*@return
*@throwsThrowable
*/
@Around("@annotation(org.springframework.web.bind.annotation.ResponseBody)")
publicObjectdoValid(ProceedingJoinPoint
pjp)throwsThrowable{
MethodSignature signature = (MethodSignature) pjp.getSignature();
Method
method = signature.getMethod();
if(!Result.class.equals(method.getReturnType())){
pjp.proceed();
}
Object[] args = pjp.getArgs();
Annotation[][]
annotations = method.getParameterAnnotations();
for(inti
=0;i
< annotations.length;i++){
if(!hasValidAnnotation(annotations[i])){
continue;
}
if(!(i
< annotations.length-1&&
args[i+1]instanceofBindingResult)){
//验证对象后面没有跟bindingResult,事实上如果没有应该到不了这一步
continue;
}
BindingResult result = (BindingResult) args[i+1];
Result
rt = getError(result);
if(RESULT_CODES.FAILL.equals(rt.getStatusCode())){
returnrt;
}
}
returnpjp.proceed();
}
/**
*判断是否包含Valid和Validated标签
*@paramannotations
*@return
*/
private booleanhasValidAnnotation(Annotation[]
annotations){
if(annotations
== null){
return
false;
}
for(Annotation
annotation : annotations){
if(annotationinstanceofValid
||
annotation instanceofValidated){
return
true;
}
}
return
false;
}
/**
*获取校验失败的错误信息
*@paramresult校验的结果
*@return校验通过“”校验失败:错误信息
*/
private staticResultgetError(BindingResult
result){
try{
StringBuilder errorMg =newStringBuilder();
if(result.hasErrors()){
for(ObjectError
error : result.getAllErrors()){
String fieldName = ((FieldError) error).getField();
errorMg.append(fieldName+error.getDefaultMessage()+",");
}
String errors = StringUtils.trimEnd(errorMg.toString(),",");
return newResult().fail(errors);
}
}catch(Exception
e) {
e.printStackTrace();
}
return newResult().success("校验通过");
}
}