项目参数校验并抛出统一异常

实现步骤:
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();
    }
}
发布了60 篇原创文章 · 获赞 41 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/aimashi620/article/details/103239886