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

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

 更新時(shí)間:2020年10月26日 15:32:47   作者:guomz  
這篇文章主要介紹了SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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)證使用對象接收參數(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)證的對象的對應(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ù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
  • @Future 限制必須是一個(gè)將來的日期
  • @Max(value) 限制必須為一個(gè)不大于指定值的數(shù)字
  • @Min(value) 限制必須為一個(gè)不小于指定值的數(shù)字
  • @Past 限制必須是一個(gè)過去的日期
  • @Pattern(value) 限制必須符合指定的正則表達(dá)式
  • @Size(max,min) 限制字符長度必須在min到max之間
  • @Past 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
  • @NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
  • @NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
  • @Email 驗(yàn)證注解的元素值是Email,也可以通過正則表達(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方法的對象參數(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ù)前加上對應(yīng)的校驗(yàn)注解進(jìn)行校驗(yàn)。

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

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

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

/**
 * 捕獲303對于body中的對象字段校驗(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);
}

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

/**
 * 捕獲303對于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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用JXLS實(shí)現(xiàn)導(dǎo)出Excel

    Java使用JXLS實(shí)現(xiàn)導(dǎo)出Excel

    jxls作為一個(gè)開源工具,提供了一種高效且易于維護(hù)的方式來處理復(fù)雜的Excel導(dǎo)出需求,下面就跟隨小編一起來學(xué)習(xí)一下如何使用jxls實(shí)現(xiàn)導(dǎo)出Excel吧
    2025-01-01
  • Java實(shí)現(xiàn)SMS短信通發(fā)送手機(jī)驗(yàn)證碼案例講解

    Java實(shí)現(xiàn)SMS短信通發(fā)送手機(jī)驗(yàn)證碼案例講解

    這篇文章主要介紹了Java實(shí)現(xiàn)SMS短信通發(fā)送手機(jī)驗(yàn)證碼案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)動(dòng)態(tài)管理示例

    SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)動(dòng)態(tài)管理示例

    這篇文章主要為大家介紹了SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)動(dòng)態(tài)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • springboot jdbctemplate如何實(shí)現(xiàn)多數(shù)據(jù)源

    springboot jdbctemplate如何實(shí)現(xiàn)多數(shù)據(jù)源

    這篇文章主要介紹了springboot jdbctemplate如何實(shí)現(xiàn)多數(shù)據(jù)源問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java設(shè)計(jì)模塊系列之書店管理系統(tǒng)單機(jī)版(三)

    Java設(shè)計(jì)模塊系列之書店管理系統(tǒng)單機(jī)版(三)

    這篇文章主要為大家詳細(xì)介紹了Java單機(jī)版的書店管理系統(tǒng)設(shè)計(jì)模塊和思想第三章,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Flowable數(shù)據(jù)庫表分類及數(shù)據(jù)字典解析

    Flowable數(shù)據(jù)庫表分類及數(shù)據(jù)字典解析

    這篇文章主要介紹了Flowable數(shù)據(jù)庫表分類及數(shù)據(jù)字典解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java中的注解機(jī)制Annotation詳解

    Java中的注解機(jī)制Annotation詳解

    這篇文章主要介紹了Java中的注解機(jī)制Annotation詳解,  Java Annotation 是 Java 語言中的一種 元數(shù)據(jù)機(jī)制,它可以在代碼中添加額外的信息,以便于程序的理解和處理,Annotation 可以用來描述類、方法、屬性等各種程序的特性,需要的朋友可以參考下
    2023-10-10
  • springboot配置mysql數(shù)據(jù)庫spring.datasource.url報(bào)錯(cuò)的解決

    springboot配置mysql數(shù)據(jù)庫spring.datasource.url報(bào)錯(cuò)的解決

    這篇文章主要介紹了springboot配置mysql數(shù)據(jù)庫spring.datasource.url報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之LinkedList從鏈表到實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之LinkedList從鏈表到實(shí)現(xiàn)

    LinkedList是Java中常用的數(shù)據(jù)結(jié)構(gòu)之一,實(shí)現(xiàn)了鏈表的特性,支持快速添加、刪除元素,可以用于實(shí)現(xiàn)隊(duì)列、棧、雙向隊(duì)列等數(shù)據(jù)結(jié)構(gòu)。LinkedList的內(nèi)部實(shí)現(xiàn)采用了雙向鏈表,其中每個(gè)節(jié)點(diǎn)都包含前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)的引用,可以直接訪問鏈表的頭尾元素
    2023-04-04
  • Spring基于xml實(shí)現(xiàn)自動(dòng)裝配流程詳解

    Spring基于xml實(shí)現(xiàn)自動(dòng)裝配流程詳解

    自動(dòng)裝配是使用spring滿足bean依賴的一種方法,spring會(huì)在應(yīng)用上下文中為某個(gè)bean尋找其依賴的bean,Spring中bean有三種裝配機(jī)制,分別是:在xml中顯式配置、在java中顯式配置、隱式的bean發(fā)現(xiàn)機(jī)制和自動(dòng)裝配
    2023-01-01

最新評論

华安县| 鄯善县| 虞城县| 新竹县| 城口县| 龙山县| 嘉禾县| 衡山县| 洛宁县| 亚东县| 杂多县| 平昌县| 绥阳县| 新密市| 抚远县| 化隆| 保山市| 个旧市| 金坛市| 共和县| 神农架林区| 新晃| 遵化市| 华安县| 高安市| 嘉兴市| 汝州市| 蒙山县| 吉首市| 华宁县| 宜川县| 静乐县| 芜湖县| 仁怀市| 美姑县| 平罗县| 芦溪县| 明光市| 桃江县| 比如县| 赤水市|