項目參數校驗並拋出統一異常

實現步驟:
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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章