- 采用AOP的方式处理参数问题
- 在类上使用 @Aspect 注解 使之成为切面类
- 在类上使用 @Component 注解 把切面类加入到IOC容器中
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 java.util.List; /** * 采用AOP的方式处理参数问题 * 在类上使用 @Aspect 注解 使之成为切面类 * 在类上使用 @Component 注解 把切面类加入到IOC容器中 * @author nql */ @Component @Aspect public class BindingResultAop { /** * Path=com.aop.controller * 设置切入点:Path为路径根据实际情况替换即可 */ @Pointcut("execution(* com.aop.controller..*.*(..))") public void method() { } /** * 检查 Controller 方法的参数是否合法 环绕通知:目标方法执行前后分别执行一些代码,发生异常的时候执行另外一些代码 * * @param joinPoint * @return * @throws Throwable */ @Around("method()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { BindingResult bindingResult = null; for (Object arg : joinPoint.getArgs()) {// 遍历被通知方法(controller方法)的参数列表 if (arg instanceof BindingResult) {// 参数校验结果会存放在BindingResult中 bindingResult = (BindingResult) arg; } } if (bindingResult != null) { if (bindingResult.hasErrors()) {// 检查是否存在校验错误 List<FieldError> errors = bindingResult.getFieldErrors();// 获取字段参数不合法的错误集合 for (FieldError error : errors) { ResultVO resultVO = new ResultVO(); resultVO.addArgs(error.getField() + " " + error.getDefaultMessage()); resultVO.setCode("SYS_PARAMETER_INVALID"); return resultVO; } } } return joinPoint.proceed();// 执行目标方法 } }
- 实体类
import java.io.Serializable; import javax.validation.constraints.NotNull; import com.qiruo.utils.validation.First; import lombok.Data; @Data public class EmailVo implements Serializable { private static final long serialVersionUID = 1L; /** * 用户id */ @NotNull(message = "用户ID不能为空", groups = {First.class}) private Integer userId; /** * email地址 */ @NotNull(message = "邮箱不能为空", groups = {First.class,Insert.class}) private String email; }
- Controller层应用实例
@PostMapping(value = "/sendEmail") public ResultVO<Map<String, Object>> sendEmail(@Validated({First.class}) @RequestBody EmailVo email, BindingResult bindingResult) throws Exception { return questionsService.sendEmail(email); }
SpringBoot 采用AOP的方式处理参数问题
最新推荐文章于 2024-06-08 13:49:02 发布