中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SprintBoot使用Validation的原因和用法

發布時間:2021-06-18 16:03:03 來源:億速云 閱讀:126 作者:chen 欄目:編程語言

本篇內容介紹了“SprintBoot使用Validation的原因和用法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1、為什么要使用Validation

在開發過程中有沒有使用一堆的if來判斷字段是否為空、電話號碼是否正確、某個輸入是否符合長度等對字段的判斷。這樣的代碼可讀性差,而且還不美觀,那么使用Validation就可以完美解決這個問題。

2、使用Validation

  • 引入validation依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 在需要校驗的實體類添加注解

@Data
public class User {
    private String id;
    @NotNull(message = "姓名不能為空")
    private String name;
}
  • 在Controller類的方法入參增加@Valid

@PostMapping(path = "")
public RestResponse save(@Valid @RequestBody User user){
    return ResponseFactory.getOkResponse();
}
  • 使用全局異常處理異常信息

全局異常處理在上一篇文章有介紹到,具體怎么使用可以參考:SpringBoot全局異常處理

@ExceptionHandler(MethodArgumentNotValidException.class)
    public RestResponse paramExceptionHandler(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        if (bindingResult.hasErrors()) {
            List<ObjectError> objectError = bindingResult.getAllErrors();
            if (!objectError.isEmpty()) {
                return ResponseFactory.getErrorMessage(objectError.stream().map(obj -> {
                    FieldError fieldError = (FieldError) obj;
                    return String.format("%s-%s", fieldError.getField(), fieldError.getDefaultMessage());
                }).collect(Collectors.joining(";")));
            }
        }
        return ResponseFactory.getErrorMessage("參數請求錯誤!");
    }

3、測試

入參:

{
    "id":"as",
    "name":null
}

出參:

{
    "code": "1",
    "message": "name-姓名不能為空",
    "data": null
}

從出參可以看出,驗證已經生效。這里需要注意的是,如果實體類中嵌套了實體類,需要在嵌套的類上加@Valid才會對嵌套的實體類校驗。

@Data
public class User {
    private String id;
    @NotNull(message = "姓名不能為空")
    private String name;
    @NotNull(message = "地址信息不能為空!")
    private Address address;
}

@Data
public class Address {
    private String id;
    @NotEmpty(message = "省份不能為空!")
    private String province;
}

如上只是在address上面加了非空校驗,在Address類中的province添加了非空校驗,如果不再address@Valid,入參不傳入address信息,如下:

入參:
{
    "id":"as",
    "name":null
}
出參:
{
    "code": "1",
    "message": "name-姓名不能為空;address-地址信息不能為空!",
    "data": null
}

入參加上address的空信息,入參出參如下:

入參:
{
    "id":"as",
    "name":null,
    "address":{
        
    }
}
出參:
{
    "code": "1",
    "message": "name-姓名不能為空",
    "data": null
}

可以看出在address上不加@Valid注解,對嵌套類的校驗是不生效的,接下來@Valid注解加上看下結果:

@Data
public class User {
    private String id;
    @NotNull(message = "姓名不能為空")
    private String name;
    @NotNull(message = "地址信息不能為空!")
    @Valid
    private Address address;
}

入參不變,出參如下:

{
    "code": "1",
    "message": "address.province-省份不能為空!;name-姓名不能為空",
    "data": null
}

從結果可以看出,嵌套類中的校驗已經生效。 上面的示例只用到了@NotNull@NotEmpty注解,還有一些常用的注解,這里就不一一演示了,可以自己測試下。下面貼出一些常用校驗注解: |注解| 作用| |:--|:--| |@NotNull| 值不能為空| |@Null |值必須為空| |@Pattern(regex=) |字符串必須匹配正則表達式 |@Size(min, max)| 集合或者數組元素的數量必須在min和max之間 |@CreditCardNumber(ignoreNonDigitCharacters=)| 字符串必須是信用卡號,按找美國的標準驗證 |@Email |字符串必須是Email地址 |@Length(min, max)| 檢查字符串的長度 |@NotBlank| 字符串不能為空串 |@NotEmpty| 字符串不能為null, 集合或者數組的 size 不能為空 |@Range(min, max)| 數字必須大于min, 小于max |@SafeHtml |字符串必須是安全的html |@URL| 字符串必須是合法的URL |@AssertFalse| 值必須是false |@AssertTrue |值必須是true |@DecimalMax(value=, inclusive=) |值必須小于等于(inclusive=true)/小于(inclusive=false)屬性指定的值,也可以注釋在字符串類型的屬性上。 |@DecimalMin(value=, inclusive=) |值必須大于等于(inclusive=true)/小于(inclusive=false)屬性指定的值,也可以注釋在字符串類型的屬性上。 |@Digist(integer=,fraction=) |數字格式檢查。integer指定整數部分的最大長度,fraction指定小數部分的最大長度 |@Future |時間必須是未來的 |@Past| 事件必須是過去的 |@Max(value=)| 值必須小于等于value指定的值。不能注解在字符串類型屬性上。 |@Min(value=) |值必須小于等于value指定的值。不能注解在字符串類型屬性上。

“SprintBoot使用Validation的原因和用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武平县| 大埔区| 黑山县| 大同市| 平顶山市| 名山县| 麟游县| 小金县| 高州市| 北京市| 蒙山县| 梧州市| 怀安县| 海原县| 青浦区| 双鸭山市| 高台县| 莱州市| 襄垣县| 芦山县| 高青县| 永善县| 滦平县| 邹平县| 大悟县| 监利县| 龙川县| 衡阳县| 兴仁县| 民县| 虹口区| 山西省| 高淳县| 西乡县| 潮州市| 曲阳县| 江津市| 太和县| 工布江达县| 罗平县| 游戏|