<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > 通常,服務端的數據校驗通常不是面向用戶的,提示信息還是應該以面向程序員和運維人員為主,在數據進入后臺之前進行一道攔截。前端js的數據校驗提示信息,是面向用戶的,要更加的友好! ## 一、異常校驗的規范及常用注解 在web開發時,對于請求參數,一般上都需要進行參數合法性校驗的,原先的寫法時一個個字段一個個去判斷,這種方式太不通用了,所以java的JSR 303: Bean Validation規范就是解決這個問題的。 JSR 303只是個規范,并沒有具體的實現,目前通常都是才有hibernate-validator進行統一參數校驗。 JSR303定義的校驗類型(可以參考《3.3 YAML配置屬性值校驗》) | Constraint | 詳細信息 | | --- | --- | | @Null | 被注釋的元素必須為 null | | @NotNull | 被注釋的元素必須不為 null | | @AssertTrue | 被注釋的元素必須為 true | | @AssertFalse | 被注釋的元素必須為 false | | @Min(value) | 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值 | | @Max(value) | 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 | | @DecimalMin(value) | 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值 | | @DecimalMax(value) | 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 | | @Size(max, min) | 被注釋的元素的大小必須在指定的范圍內 | | @Digits (integer, fraction) | 被注釋的元素必須是一個數字,其值必須在可接受的范圍內 | | @Past | 被注釋的元素必須是一個過去的日期 | | @Future | 被注釋的元素必須是一個將來的日期 | | @Pattern(value) | 被注釋的元素必須符合指定的正則表達式 | Hibernate Validator 附加的 constraint | Constraint | 詳細信息 | | --- | --- | | @Email | 被注釋的元素必須是電子郵箱地址 | | @Length | 被注釋的字符串的大小必須在指定的范圍內 | | @NotEmpty | 被注釋的字符串的必須非空 | | @Range | 被注釋的元素必須在合適的范圍內 | **用法:把以上注解加在ArticleVO的屬性字段上,然后在參數校驗的方法上加@Valid注解** >這里git版本問題沒有引入,需要重新引入一下jar包。詳細見《3.3 YAML配置屬性值校驗》 如: ![](https://img.kancloud.cn/9c/c5/9cc52502718ce6356836de1fd47f2529_834x434.png) ~~~ @PutMapping("/articles/{id}") public @ResponseBody AjaxResponse updateArticle(@PathVariable Long id, @Valid @RequestBody ArticleVO article) { article.setId(id); articleRestService.updateArticle(article); return AjaxResponse.success(article); } ~~~ ![](https://img.kancloud.cn/36/9f/369fd828190e0c25dde6da70667db23f_1176x264.png) postman測試一下 正常update沒問題 ![](https://img.kancloud.cn/f7/61/f761a9dbb0b57a058f604dff401569f6_1412x847.png) 將content改成空之后發現拋出異常 ![](https://img.kancloud.cn/bf/b7/bfb743c830fd55a5f3d056b57f37cf43_1434x817.png) ## 二、友好的數據校驗異常處理(用戶輸入異常的全局處理) 我們已知當數據校驗失敗的時候,會拋出異常BindException或MethodArgumentNotValidException。所以我們對這兩種異常做全局處理,防止程序員重復編碼帶來困擾。 在異常注解寫message: ![](https://img.kancloud.cn/10/d7/10d7d894cd1c35ae14074c026e950bf2_914x229.png) 在WebExceptionHandler寫兩個異常的處理: ![](https://img.kancloud.cn/ba/c6/bac618e0e6b91dbe9b36fff3214df73a_1249x587.png) ~~~ @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public AjaxResponse handleBindException(MethodArgumentNotValidException ex) { FieldError fieldError = ex.getBindingResult().getFieldError(); return AjaxResponse.error(new CustomException(CustomExceptionType.USER_INPUT_ERROR,fieldError.getDefaultMessage())); } @ExceptionHandler(BindException.class) @ResponseBody public AjaxResponse handleBindException(BindException ex) { FieldError fieldError = ex.getBindingResult().getFieldError(); return AjaxResponse.error(new CustomException(CustomExceptionType.USER_INPUT_ERROR,fieldError.getDefaultMessage())); } ~~~ 在啟動服務測試一下,發現異常顯示為處理內容 ![](https://img.kancloud.cn/6f/63/6f63f5e4586504781c7a854d96f8024e_1407x876.png) >總結一下: 在實際開發中,寫業務實現時開發只需要在model層寫異常校驗和對應的message,同時在Controller層對應的方法內加@Valid注解。 其他的異常處理在全局異常處理中實現并返回給前端,開發人員只需要關注校驗注解和校驗方法就可以了。 ![](https://img.kancloud.cn/7c/a5/7ca58640759c0c286660d04e559681f4_560x808.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看