欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)

 更新時(shí)間:2020年10月26日 15:32:47   作者:guomz  
這篇文章主要介紹了SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

依賴添加

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

一些較老版本的SpringBoot需要添加相關(guān)依賴,我使用的2.1.4發(fā)行版不用這個(gè)操作。

驗(yàn)證使用對(duì)象接收參數(shù)的情況

public class PointDeductSetRequest {
 private Long id;
 @NotBlank(message = "租戶id為空")
 private String tenantId;
 private Integer status;
 @NotNull
 private Integer pointValue;
 @NotNull
 private Integer deductValue;
 @NotBlank(message = "操作員id為空")
 private String operator;
}

首先在需要驗(yàn)證的對(duì)象的對(duì)應(yīng)字段上方加上校驗(yàn)注解,以下為一些常用注解:

  • @Null 限制只能為null
  • @NotNull 限制必須不為null
  • @AssertFalse 限制必須為false
  • @AssertTrue 限制必須為true
  • @DecimalMax(value) 限制必須為一個(gè)不大于指定值的數(shù)字
  • @DecimalMin(value) 限制必須為一個(gè)不小于指定值的數(shù)字
  • @Digits(integer,fraction) 限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過(guò)integer,小數(shù)部分的位數(shù)不能超過(guò)fraction
  • @Future 限制必須是一個(gè)將來(lái)的日期
  • @Max(value) 限制必須為一個(gè)不大于指定值的數(shù)字
  • @Min(value) 限制必須為一個(gè)不小于指定值的數(shù)字
  • @Past 限制必須是一個(gè)過(guò)去的日期
  • @Pattern(value) 限制必須符合指定的正則表達(dá)式
  • @Size(max,min) 限制字符長(zhǎng)度必須在min到max之間
  • @Past 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
  • @NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長(zhǎng)度不為0、集合大小不為0)
  • @NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長(zhǎng)度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
  • @Email 驗(yàn)證注解的元素值是Email,也可以通過(guò)正則表達(dá)式和flag指定自定義的email格式
@RequestMapping(value = "/deduct", method = RequestMethod.POST)
public BusinessResponse setPointDeduct(@RequestBody @Valid PointDeductSetRequest request){
  pointDeductService.setPointDeductRule(request);
  return new BusinessResponse(ResponseEnum.OK);
}

之后在controller方法的對(duì)象參數(shù)前加@Valid注解。

校驗(yàn)使用單個(gè)參數(shù)接受的情況

@RequestMapping(value = "/deduct", method = RequestMethod.GET)
public PageResponse<TPointDeduct> getPointDeductList(@RequestParam(value = "page", required = false) Integer page,
 @RequestParam(value = "pageSize", required = false) Integer pageSize,
 @RequestParam(value = "tenantId", required = false) @NotBlank(message = "租戶id為空") String tenantId,
 @RequestParam(value = "status", required = false) Integer status){
  PageResponse<TPointDeduct> response = pointDeductService.getPointDeductList(page, pageSize, tenantId, status);
 response.setCodeMsg(ResponseEnum.OK);
 return response;
}

首先需要在controller類上加@Validated注解,之后在方法中需要校驗(yàn)的參數(shù)前加上對(duì)應(yīng)的校驗(yàn)注解進(jìn)行校驗(yàn)。

對(duì)校驗(yàn)產(chǎn)生的異常的捕獲

定義全局異常處理類并用@ControllerAdvice標(biāo)注,由于對(duì)象和單個(gè)參數(shù)因校驗(yàn)產(chǎn)生的異常類型不同,因此需要分別處理。

對(duì)于對(duì)象作為接收前端請(qǐng)求的情況,因校驗(yàn)產(chǎn)生的異常類型為MethodArgumentNotValidException,示例方法如下:

/**
 * 捕獲303對(duì)于body中的對(duì)象字段校驗(yàn)
 * @param e
 * @param request
 * @return
 */@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
ResponseEntity<Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest request){
  List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
 if (fieldErrors != null && !fieldErrors.isEmpty()){
   String message = fieldErrors.get(0).getDefaultMessage();
 log.error(message, e);
 }
  HttpStatus httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
 HttpHeaders headers = new HttpHeaders();
 Response response = new Response();
 response.setCode(ResponseEnum.FORMAT_ERROR.code());
 response.setMessage(ResponseEnum.FORMAT_ERROR.message());
 return new ResponseEntity<>(response, headers, httpStatus);
}

對(duì)于使用單個(gè)參數(shù)接受前端請(qǐng)求,因校驗(yàn)產(chǎn)生的異常類為ConstraintViolationException,示例方法如下:

/**
 * 捕獲303對(duì)于request param單個(gè)參數(shù)的校驗(yàn)
 * @param e
 * @param request
 * @return
 */@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
ResponseEntity<Object> handleConstraintViolationException(ConstraintViolationException e, HttpServletRequest request){
  HttpStatus httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
 HttpHeaders headers = new HttpHeaders();
 Response response = new Response();
 response.setCode(ResponseEnum.FORMAT_ERROR.code());
 response.setMessage(ResponseEnum.FORMAT_ERROR.message());
 return new ResponseEntity<>(response, headers, httpStatus);
}

到此這篇關(guān)于SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot jsr303校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea.vmoptions 最佳配置方案

    idea.vmoptions 最佳配置方案

    本文介紹了針對(duì)IntelliJ IDEA的優(yōu)化配置建議,包括提升內(nèi)存設(shè)置、啟用G1垃圾回收器、優(yōu)化垃圾回收策略以及調(diào)整網(wǎng)絡(luò)設(shè)置等,旨在提高IDE的性能和響應(yīng)速度,同時(shí),指導(dǎo)用戶如何修改vmoptions文件以應(yīng)用這些配置,并提供了監(jiān)控內(nèi)存使用和插件管理的建議
    2024-09-09
  • Java 泛型(Generic)簡(jiǎn)介及用法詳解

    Java 泛型(Generic)簡(jiǎn)介及用法詳解

    泛型是一種把類型明確的工作推遲到創(chuàng)建對(duì)象或者調(diào)用方法的時(shí)候才去明確的特殊的類型,參數(shù)化類型,把類型當(dāng)作參數(shù)一樣的傳遞,本文給大家介紹Java 泛型(Generic)概述及使用,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java源碼解析HashMap簡(jiǎn)介

    Java源碼解析HashMap簡(jiǎn)介

    今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap簡(jiǎn)介,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

    MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

    這篇文章主要介紹了MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mybatis中嵌套使用foreach需要注意的坑

    mybatis中嵌套使用foreach需要注意的坑

    在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),如果需要在一個(gè)大的foreach標(biāo)簽中嵌套另一個(gè)foreach,需要注意內(nèi)層foreach的item屬性不能與外層重復(fù),如果出現(xiàn)重復(fù),會(huì)導(dǎo)致綁定參數(shù)時(shí)找不到正確的參數(shù),從而拋出異常
    2024-09-09
  • SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表

    SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表

    這篇文章主要介紹了SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java 中Collection存儲(chǔ)器詳解及簡(jiǎn)單實(shí)例

    java 中Collection存儲(chǔ)器詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 中Collection存儲(chǔ)器詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java中如何取出String字符串括號(hào)中的內(nèi)容

    Java中如何取出String字符串括號(hào)中的內(nèi)容

    這篇文章主要介紹了Java中如何取出String字符串括號(hào)中的內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot控制配置類加載順序方式

    SpringBoot控制配置類加載順序方式

    這篇文章主要介紹了SpringBoot控制配置類加載順序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 在idea 中添加和刪除模塊Module操作

    在idea 中添加和刪除模塊Module操作

    這篇文章主要介紹了在idea 中添加和刪除模塊Module操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08

最新評(píng)論