日常项目开发中,validation包为后端校验提供了极大的便利,那么对于校验失败提醒,我们又应该怎么将错误信息封装成json给前端呢?
单刀直入,直接上代码,客官慢用~~~
——————————
参数校验拦截器
package com.rq.aop.common.handler;
import com.alibaba.fastjson.JSON;
import com.rq.aop.common.R;
import com.rq.aop.common.ResponseBuilder;
import com.rq.aop.common.enums.ResultCode;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import java.util.ArrayList;
import java.util.List;
/**
* Controller参数校验拦截器
*
*/
@Component
@Aspect
public class ValidationInterceptor {
private final Logger log = LoggerFactory.getLogger(getClass());
/**
* 拦截{@link com.rq.aop.controller.HelloController}包下所有返回值类型是{@link R}
* 且最后一个参数是{@link Errors}的公共方法
*
* @param pjp 连接点
* @param errors 校验结果对象
* @return 请求参数校验错误信息,或者请求正常执行的结果
* @throws Throwable 方法调用抛出的异常
*/
@Around(value = "execution(com.rq.aop.common.R com.rq.aop.controller..*(..)) && args(.., errors))")
public R processValidation(ProceedingJoinPoint pjp, Errors errors) throws Throwable {
if (errors.hasFieldErrors()) {
List<ErrorMessage> errorMessages = getErrorMessages(errors);
// 被校验的参数在Errors参数前一位
Object[] arguments = pjp.getArgs();
int index = arguments.length - 2;
if (index >= 0) {
Object validateTarget =</