SpringBoot进阶课程
Web进阶
@Valid 注解
用于验证信息是否符合要求,直接加注解于变量之前。所属包为:javax.validation.Valid。
- 在Girl的实体类中的添加验证的信息要求
1//限制年龄必须达到18岁,Min代表最小值,若当age小于最小值就显示提示message
2@Min(value = 18,message = "未成年禁止入内")
3private Integer age;
- 在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是种思想,更应该应用于平日里。之后还有两节课,讲了“统一异常处理”和“单元测试”,在“统一异常处理”中,通过枚举类型、和自定义异常更方便管理代码和项目,值得多看几遍。