亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于BindingResult的使用總結(jié)及注意事項(xiàng)

 更新時間:2021年12月02日 15:16:24   作者:啊~~噙!  
這篇文章主要介紹了關(guān)于BindingResult的使用總結(jié)及注意事項(xiàng),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

記一個簡單又好用的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) 不要錯用了異常類型,比如在int上不可用@size
  • @Length(min=, max=):只適用于String 類型

Booelan檢查

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

日期檢查

  • @Past:驗(yàn)證 Date 和 Calendar 對象是否在當(dāng)前時間之前
  • @Future:驗(yàn)證 Date 和 Calendar 對象是否在當(dāng)前時間之后
  • @Pattern:驗(yàn)證 String 對象是否符合正則表達(dá)式的規(guī)則

其他驗(yàn)證

  • @Vaild 遞歸驗(yàn)證,用于對象、數(shù)組和集合,會對對象的元素、數(shù)組的元素進(jìn)行一一校驗(yàn)
  • @Email 用于驗(yàn)證一個字符串是否是一個合法的右鍵地址,空字符串或null算驗(yàn)證通過
  • @URL(protocol=,host=,port=,regexp=,flags=) 用于校驗(yàn)一個字符串是否是合法URL

數(shù)值檢查

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

  • @Min:驗(yàn)證 Number 和 String 對象是否大等于指定的值
  • @Max:驗(yàn)證 Number 和 String 對象是否小等于指定的值
  • @DecimalMax:被標(biāo)注的值必須不大于約束中指定的最大值. 這個約束的參數(shù)是一個通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度
  • @DecimalMin:被標(biāo)注的值必須不小于約束中指定的最小值. 這個約束的參數(shù)是一個通過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同時使用的。

項(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)建時間")
    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 不能接受錯誤信息

控制臺輸出

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方法

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

具體的驗(yàn)證器

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 帶你入門java雪花算法原理

    帶你入門java雪花算法原理

    SnowFlake 算法,是 Twitter 開源的分布式 id 生成算法。其核心思想就是:使用一個 64 bit 的 long 型的數(shù)字作為全局唯一 id。在分布式系統(tǒng)中的應(yīng)用十分廣泛,且ID 引入了時間戳,基本上保持自增的
    2021-06-06
  • Go?Java算法之交錯字符串示例詳解

    Go?Java算法之交錯字符串示例詳解

    這篇文章主要為大家介紹了Go?Java算法之交錯字符串示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • sharding-jdbc5.0.0實(shí)現(xiàn)分表實(shí)踐

    sharding-jdbc5.0.0實(shí)現(xiàn)分表實(shí)踐

    本文主要介紹了sharding-jdbc5.0.0分表實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java編程實(shí)現(xiàn)服務(wù)器端支持?jǐn)帱c(diǎn)續(xù)傳的方法(可支持快車、迅雷)

    Java編程實(shí)現(xiàn)服務(wù)器端支持?jǐn)帱c(diǎn)續(xù)傳的方法(可支持快車、迅雷)

    這篇文章主要介紹了Java編程實(shí)現(xiàn)服務(wù)器端支持?jǐn)帱c(diǎn)續(xù)傳的方法,涉及Java文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • JVM完全解讀之Metaspace解密源碼分析

    JVM完全解讀之Metaspace解密源碼分析

    通過這篇文章,你將可以了解到,為什么會有metaspace?metaspace的組成,metaspace的VM參數(shù),jstat里我們應(yīng)該關(guān)注metaspace的哪些值,有需要的朋友可以借鑒參考下
    2022-01-01
  • SpringBoot輕松整合MongoDB的全過程記錄

    SpringBoot輕松整合MongoDB的全過程記錄

    這篇文章主要給大家介紹了關(guān)于SpringBoot輕松整合MongoDB的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java返回集合為null還是空集合及空集合的三種寫法小結(jié)

    java返回集合為null還是空集合及空集合的三種寫法小結(jié)

    這篇文章主要介紹了java返回集合為null還是空集合及空集合的三種寫法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java使用Thread和Runnable的線程實(shí)現(xiàn)方法比較

    Java使用Thread和Runnable的線程實(shí)現(xiàn)方法比較

    這篇文章主要介紹了Java使用Thread和Runnable的線程實(shí)現(xiàn)方法,結(jié)合實(shí)例形式對比分析了Java使用Thread和Runnable實(shí)現(xiàn)與使用線程的相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • spring jdbctemplate的用法小結(jié)

    spring jdbctemplate的用法小結(jié)

    jdbcTemplate是spring框架中提供的一個對象,是對原始繁雜的jdbc 對象的簡單封裝,本文通過實(shí)例代碼介紹spring jdbctemplate的用法小結(jié),需要的朋友可以參考下
    2023-04-04
  • SpringBoot使用AOP記錄接口操作日志詳解

    SpringBoot使用AOP記錄接口操作日志詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用AOP記錄接口操作日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論