实现步骤:
1.在dto中使用注解做参数校验,并且为参数添加get set方法,这是必须的,例如
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
2.在controller中,为接口方法需要校验的参数加上@Valid注解,并添加一个参数BindingResult紧跟在@Valid注解的参数后面,如果有多个参数加了@Valid,就有多个BindingResult。
3.编写一个切面类去统一处理返回的结果
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
package com.nelson.edu.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
@Aspect
@Component
public class ValidateAspect {
@Pointcut("execution(public * com.nelson..edu.controller.*.*(..))")
public void validate() {
}
@Around("validate()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
BindingResult bindingResult = null;
Object[] args = joinPoint.getArgs();
if (args != null && args.length != 0) {
for (Object object : args) {
if (object instanceof BindingResult) {
bindingResult = (BindingResult) object;
break;
}
}
}
if (bindingResult != null && bindingResult.hasErrors()) {
StringBuffer sb = new StringBuffer();
for (ObjectError objectError : bindingResult.getAllErrors()) {
sb.append(((FieldError) objectError).getField() + " : ").append(objectError.getDefaultMessage() + ",");
}
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
return joinPoint.proceed();
}
}