最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 數(shù)據(jù)校驗(yàn)@Valid+統(tǒng)一異常處理的實(shí)現(xiàn)

 更新時(shí)間:2019年04月30日 14:44:19   作者:JYT IMXB  
這篇文章主要介紹了Spring Boot 數(shù)據(jù)校驗(yàn)@Valid+統(tǒng)一異常處理的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

1.先在你需要校驗(yàn)的實(shí)體類上面加上所需要的注解

為了測(cè)試,我自己就簡(jiǎn)單寫了。@NotNull 和 @NotBlank 不能為空

 @Entity
 @Table(name = "User")
 @Data
 public class User implements Serializable {

 @Id
 @NotNull(message = "id不能為空")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer id;

 @NonNull
 @NotBlank(message = "姓名不能為空")
 @Column(name = "name")
 private String name;

 public User() {
 }

 public User(Integer id,String name) {
  this.id=id;
  this.name = name;
 }


}

下面是我從別的博客收集的所有參數(shù)校驗(yàn)注解的使用規(guī)則方法

空檢查

@Null 驗(yàn)證對(duì)象是否為null

@NotNull 驗(yàn)證對(duì)象是否不為null, 無(wú)法查檢長(zhǎng)度為0的字符串

@NotBlank 檢查約束字符串是不是Null還有被Trim的長(zhǎng)度是否大于0,只對(duì)字符串,且會(huì)去掉前后空格.

@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.

Booelan檢查

@AssertTrue 驗(yàn)證 Boolean 對(duì)象是否為 true

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

長(zhǎng)度檢查

@Size(min=, max=) 驗(yàn)證對(duì)象(Array,Collection,Map,String)長(zhǎng)度是否在給定的范圍之內(nèi)

@Length(min=, max=) Validates that the annotated string is between min and max included.

日期檢查

@Past 驗(yàn)證 Date 和 Calendar 對(duì)象是否在當(dāng)前時(shí)間之前

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

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

數(shù)值檢查

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

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

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

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

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

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

@Digits(integer=,fraction=) 驗(yàn)證字符串是否是符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。 @Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. @Range(min=10000,max=50000,message=“range.bean.wage”) private BigDecimal wage;

@Valid 遞歸的對(duì)關(guān)聯(lián)對(duì)象進(jìn)行校驗(yàn), 如果關(guān)聯(lián)對(duì)象是個(gè)集合或者數(shù)組,那么對(duì)其中的元素進(jìn)行遞歸校驗(yàn),如果是一個(gè)map,則對(duì)其中的值部分進(jìn)行校驗(yàn).(是否進(jìn)行遞歸驗(yàn)證)

@CreditCardNumber信用卡驗(yàn)證

@Email 驗(yàn)證是否是郵件地址,如果為null,不進(jìn)行驗(yàn)證,算通過(guò)驗(yàn)證。

@ScriptAssert(lang= ,script=, alias=)

@URL(protocol=,host=, port=,regexp=, flags=)

2.在controller層加入@Valid注解

ServiceResult是我自己創(chuàng)建的異常返回類

添加用戶信息的方法

 @PostMapping("/saveUser")
 public ServiceResult addUsers(@Valid @RequestBody User user){
   return ServiceResult.success(userRepository.save(user));
 }

3.創(chuàng)建統(tǒng)一處理異常的類

@RestControllerAdvice
@ExceptionHandler(寫你想要攔截的異常類型)

這兩個(gè)注解必須要

第一個(gè)方法是校驗(yàn)異常的統(tǒng)一處理

第二個(gè)是防止參數(shù)類型不一致的處理

當(dāng)然你也可以在里面處理其他異常。

@RestControllerAdvice
public class BadRequestExceptionHandler {


 private static final Logger logger = LoggerFactory.getLogger(BadRequestExceptionHandler.class);

 /**
  * 校驗(yàn)錯(cuò)誤攔截處理
  *
  * @param exception 錯(cuò)誤信息集合
  * @return 錯(cuò)誤信息
  */
 @ExceptionHandler(MethodArgumentNotValidException.class)
 public ServiceResult validationBodyException(MethodArgumentNotValidException exception){

  BindingResult result = exception.getBindingResult();
  if (result.hasErrors()) {

   List<ObjectError> errors = result.getAllErrors();

   errors.forEach(p ->{

    FieldError fieldError = (FieldError) p;
    logger.error("Data check failure : object{"+fieldError.getObjectName()+"},field{"+fieldError.getField()+
      "},errorMessage{"+fieldError.getDefaultMessage()+"}");

   });

  }
  return ServiceResult.error("請(qǐng)?zhí)顚懻_信息");
 }

 /**
  * 參數(shù)類型轉(zhuǎn)換錯(cuò)誤
  *
  * @param exception 錯(cuò)誤
  * @return 錯(cuò)誤信息
  */
 @ExceptionHandler(HttpMessageConversionException.class)
 public ServiceResult parameterTypeException(HttpMessageConversionException exception){

  logger.error(exception.getCause().getLocalizedMessage());
  return ServiceResult.error("類型轉(zhuǎn)換錯(cuò)誤");

 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA運(yùn)行SpringBoot項(xiàng)目的圖文教程

    IDEA運(yùn)行SpringBoot項(xiàng)目的圖文教程

    本文主要介紹了IDEA運(yùn)行SpringBoot項(xiàng)目的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Java線程中synchronized的用法與原理解析

    Java線程中synchronized的用法與原理解析

    這篇文章主要介紹了Java線程中synchronized的用法與原理解析,只要有線程,就會(huì)有并發(fā)的現(xiàn)象,也同時(shí)會(huì)產(chǎn)生數(shù)據(jù)不一致,那么對(duì)于需要使用同一個(gè)數(shù)據(jù)的兩個(gè)線程,就會(huì)產(chǎn)生沖突,那么就引出了鎖的概念,本篇會(huì)針對(duì)性的說(shuō)下synchronized這個(gè)關(guān)鍵字,需要的朋友可以參考下
    2024-01-01
  • java項(xiàng)目實(shí)現(xiàn)圖片等比縮放

    java項(xiàng)目實(shí)現(xiàn)圖片等比縮放

    這篇文章主要為大家詳細(xì)介紹了java項(xiàng)目實(shí)現(xiàn)圖片等比縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java多線程中的Phaser使用解析

    Java多線程中的Phaser使用解析

    這篇文章主要介紹了Java多線程中的Phaser使用解析,java多線程技術(shù)提供了Phaser工具類,Phaser表示“階段器”,用來(lái)解決控制多個(gè)線程分階段共同完成任務(wù)的情景問(wèn)題,其作用相比CountDownLatch和CyclicBarrier更加靈活,需要的朋友可以參考下
    2023-11-11
  • 從底層源碼深入分析Spring的IoC容器的實(shí)現(xiàn)原理

    從底層源碼深入分析Spring的IoC容器的實(shí)現(xiàn)原理

    IoC容器負(fù)責(zé)管理對(duì)象的生命周期和依賴關(guān)系,大大簡(jiǎn)化了應(yīng)用程序的開(kāi)發(fā)和維,我們這篇文章將會(huì)從底層源碼的角度深入分析Spring的IoC容器實(shí)現(xiàn),探索它的工作原理和關(guān)鍵組件,需要的朋友可以參考下
    2023-07-07
  • 一文掌握J(rèn)ava中List和Set接口的基本使用

    一文掌握J(rèn)ava中List和Set接口的基本使用

    這篇文章主要為大家詳細(xì)介紹Java中List和Set接口,文中通過(guò)示例代碼讓大家能夠輕松掌握List和Set接口的基本使用,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • Spring Boot中RabbitMQ自動(dòng)配置的介紹、原理和使用方法

    Spring Boot中RabbitMQ自動(dòng)配置的介紹、原理和使用方法

    本文介紹了Spring Boot中RabbitMQ自動(dòng)配置的介紹、原理和使用方法,通過(guò)本文的介紹,我們希望讀者能夠更好地理解Spring Boot中RabbitMQ的使用方法,并在項(xiàng)目中更加靈活地應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • java定時(shí)任務(wù)Timer和TimerTask使用詳解

    java定時(shí)任務(wù)Timer和TimerTask使用詳解

    這篇文章主要為大家詳細(xì)介紹了java定時(shí)任務(wù)Timer和TimerTask使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 深入Parquet文件格式設(shè)計(jì)原理及實(shí)現(xiàn)細(xì)節(jié)

    深入Parquet文件格式設(shè)計(jì)原理及實(shí)現(xiàn)細(xì)節(jié)

    這篇文章主要介紹了深入Parquet文件格式設(shè)計(jì)原理及實(shí)現(xiàn)細(xì)節(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 基于java中的流程控制語(yǔ)句總結(jié)(必看篇)

    基于java中的流程控制語(yǔ)句總結(jié)(必看篇)

    下面小編就為大家?guī)?lái)一篇基于java中的流程控制語(yǔ)句總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論

百色市| 巴南区| 孙吴县| 偏关县| 汝州市| 莒南县| 汶川县| 宁陕县| 昌平区| 琼中| 游戏| 永胜县| 松桃| 凤阳县| 青浦区| 天镇县| 台中县| 西华县| 彝良县| 绥滨县| 高邑县| 哈尔滨市| 隆尧县| 九台市| 盐亭县| 保山市| 迁安市| 达日县| 洛川县| 闵行区| 天祝| 阳城县| 湟源县| 崇州市| 白银市| 高邮市| 宝应县| 台南县| 新邵县| 依兰县| 乌苏市|