SpringBoot进阶课程

SpringBoot进阶课程

Web进阶

@Valid 注解
用于验证信息是否符合要求,直接加注解于变量之前。所属包为:javax.validation.Valid。

  1. 在Girl的实体类中的添加验证的信息要求
1//限制年龄必须达到18岁,Min代表最小值,若当age小于最小值就显示提示message
2@Min(value = 18,message = "未成年禁止入内")
3private Integer age;
  1. 在controller层的方法的要校验的参数上添加@Valid注解,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息
 1@PostMapping(value = "/girls")
2public Girl girlAdd(@Valid Girl girl, BindingResult bindingResult){
3
4  //验证是否有错,如果有错就输出错误信息
5  if(bindingResult.hasErrors()){
6      System.out.println(bindingResult.getFieldError().getDefaultMessage());
7      return null;
8  }
9
10  girl.setCupSize(girl.getCupSize());
11  girl.setAge(girl.getAge());
12
13 return girlRepository.save(girl);
14
15}

上述两段代码最终实现效果:
当验证信息小于18时,girlAdd方法将错误反馈给bindingResult
最后bindingResult.getFieldError().getDefaultMessage()获取错误信息message


AOP统一处理请求日志

  • 面向切面--AOP(Aspect Oriented Programming)是一种编程范式,与语言无关,是一种程序设计思想。
    • 将通用逻辑从业务逻辑中分离出来
 1@Aspect
2@Component
3public class HttpAspect {
4
5   private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
6
7   @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
8   public void log() {
9   }
10
11   @Before("log()")
12   public void doBefore(JoinPoint joinPoint) {
13       ServletRequestAttributes attributes = (ServletRequestAttributes) 
14       RequestContextHolder.getRequestAttributes();
15       HttpServletRequest request = attributes.getRequest();
16       //url
17       logger.info("url={}", request.getRequestURL());
18       //method
19       logger.info("method={}", request.getMethod());
20       //ip
21       logger.info("ip={}", request.getRemoteAddr());
22       //类方法
23       logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
24       //参数
25       logger.info("args={}", joinPoint.getArgs());
26   }
27   @After("log()")
28   public void doAfter() {
29       logger.info("222222222222");
30   }
31
32   @AfterReturning(returning = "object", pointcut = "log()")
33   public void doAfterReturning(Object object) {
34       logger.info("response={}", object.toString());
35   }
36}

关于上述代码的详细讲解可参考廖师兄,真的十分清晰!AOP是种思想,更应该应用于平日里。之后还有两节课,讲了“统一异常处理”和“单元测试”,在“统一异常处理”中,通过枚举类型、和自定义异常更方便管理代码和项目,值得多看几遍。

猜你喜欢

转载自www.cnblogs.com/nnnlillian/p/10033781.html