實現步驟:
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();
}
}