溫馨提示×

溫馨提示×

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

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

BindingResult的使用方法有哪些

發(fā)布時(shí)間:2021-12-02 15:47:31 來源:億速云 閱讀:460 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“BindingResult的使用方法有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“BindingResult的使用方法有哪些”吧!

    BindingResult總結(jié)及注意事項(xiàng)

    記一個(gè)簡單又好用的API:BindingResult

    BindingResult使用起來很簡單,一般在controller中使用

    作用:用于對前端穿進(jìn)來的參數(shù)進(jìn)行校驗(yàn),省去了大量的邏輯判斷操作

    相關(guān)的校驗(yàn)API

    空檢查
    • @NotEmpty:用在集合類上面;不能為null,而且長度必須大于0

    • @NotBlank:用在String上面;只能作用在String上,不能為null,而且調(diào)用trim()后,長度必須大于0

    • @NotNull:用在基本類型上;不能為null,但可以為empty。

    長度檢查
    • @Size(min=,max=):驗(yàn)證對象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi) 不要錯(cuò)用了異常類型,比如在int上不可用@size

    • @Length(min=, max=):只適用于String 類型

    Booelan檢查
    • @AssertTrue:驗(yàn)證 Boolean 對象是否為 true

    • @AssertFalse:驗(yàn)證 Boolean 對象是否為 false

    日期檢查
    • @Past:驗(yàn)證 Date 和 Calendar 對象是否在當(dāng)前時(shí)間之前

    • @Future:驗(yàn)證 Date 和 Calendar 對象是否在當(dāng)前時(shí)間之后

    • @Pattern:驗(yàn)證 String 對象是否符合正則表達(dá)式的規(guī)則

    其他驗(yàn)證

    • @Vaild 遞歸驗(yàn)證,用于對象、數(shù)組和集合,會對對象的元素、數(shù)組的元素進(jìn)行一一校驗(yàn)

    • @Email 用于驗(yàn)證一個(gè)字符串是否是一個(gè)合法的右鍵地址,空字符串或null算驗(yàn)證通過

    • @URL(protocol=,host=,port=,regexp=,flags=) 用于校驗(yàn)一個(gè)字符串是否是合法URL

    數(shù)值檢查

    建議使用在Stirng,Integer類型,不建議使用在int類型上,因?yàn)楸韱沃禐?quot;" 時(shí)無法轉(zhuǎn)換為int,但可以轉(zhuǎn)換為Stirng為"",Integer為null

    • @Min:驗(yàn)證 Number 和 String 對象是否大等于指定的值

    • @Max:驗(yàn)證 Number 和 String 對象是否小等于指定的值

    • @DecimalMax:被標(biāo)注的值必須不大于約束中指定的最大值. 這個(gè)約束的參數(shù)是一個(gè)通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度

    • @DecimalMin:被標(biāo)注的值必須不小于約束中指定的最小值. 這個(gè)約束的參數(shù)是一個(gè)通過BigDecimal定義的最小值的字符串表示.小數(shù)存在精度

    • @Digits:驗(yàn)證 Number 和 String 的構(gòu)成是否合法

    • @Digits(integer=,fraction=):驗(yàn)證字符串是否是符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。

    項(xiàng)目使用中遇到的問題

    一開始傳入的參數(shù)沒有使用@Validated 修飾,結(jié)果綁定不起作用,參數(shù)校驗(yàn)不成功,加上此注解即可生效。

    所以BingdingResult是要與@Validated同時(shí)使用的。

    項(xiàng)目中具體使用如下:

    controller中:

    @ApiOperation("添加角色")
    @RequestMapping(value = "/create", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult create(@Validated @RequestBody UmsRole role, BindingResult bindingResult ) {
        int count = roleService.create(role);
        if (count > 0) {
            return CommonResult.success(count);
        }
        return CommonResult.failed();
    }

    domain中:

    import io.swagger.annotations.ApiModelProperty;
    import javax.validation.constraints.NotEmpty;
    import java.io.Serializable;
    import java.util.Date;
    @Data
    public class UmsRole implements Serializable {
        private Long id;
        @ApiModelProperty(value = "名稱")
        @NotEmpty(message = "name不能為空!")
        private String name;
        @ApiModelProperty(value = "描述")
        @NotEmpty(message = "描述不能為空!")
        private String description;
        @ApiModelProperty(value = "后臺用戶數(shù)量")
        private Integer adminCount;
        @ApiModelProperty(value = "創(chuàng)建時(shí)間")
        private Date createTime;
        @ApiModelProperty(value = "啟用狀態(tài):0->禁用;1->啟用")
        private Integer status;
        private Integer sort;
        private static final long serialVersionUID = 1L;

    調(diào)用接口返回效果:

    參數(shù):

    {
    “name”:“test”
    }

    返回值:

    {
    “code”: 404,
    “message”: “描述不能為空!”,
    “data”: null
    }

    注意!

    1.@Validated 與BindingResult 需要相鄰,否則 變量result 不能接受錯(cuò)誤信息

    控制臺輸出

    Field error in object 'entity' on field '變量': rejected value [null]; codes [NotNull.entity.變量,NotNull.變量,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes

    2.如果使用了@Validated,那么BeanValidate也會拋出異常而不是之前的封裝在BindingResult中

    總結(jié):

    使用BindingResult,省去了代碼塊中的大部分校驗(yàn)

    BindingResult作用原理

    controller代碼

    @RequestMapping("")
        public String index(@Valid User user , BindingResult bindingResult){
            if (bindingResult.hasErrors()){
                List<ObjectError> allErrors = bindingResult.getAllErrors();
                ObjectError objectError = allErrors.get(0);
                System.out.println(objectError.getDefaultMessage());
                System.out.println(objectError.getObjectName());
                System.out.println(allErrors);
            }
            return "index";
        }

    請求先來到DispatcherServlet的doDispatch 方法,最終會調(diào)用ModelAttributeMethodProcessor#resolveArgument方法

    BindingResult的使用方法有哪些

    調(diào)用DataBinder#validate方法后調(diào)用ConstraintTree#validateSingleConstraint,由它來調(diào)用具體的驗(yàn)證器

    BindingResult的使用方法有哪些

    具體的驗(yàn)證器

    BindingResult的使用方法有哪些

    感謝各位的閱讀,以上就是“BindingResult的使用方法有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對BindingResult的使用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI