1. 程式人生 > >SpringBoot進階課程

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是種思想,更應該應用於平日裡。之後還有兩節課,講了“統一異常處理”和“單元測試”,在“統一異常處理”中,通過列舉型別、和自定義異常更方便管理程式碼和專案,值得多看幾遍。