亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

SpringBoot如何使用jsr303校驗

發布時間:2020-10-27 14:26:58 來源:億速云 閱讀:207 作者:Leah 欄目:開發技術

本篇文章為大家展示了SpringBoot如何使用jsr303校驗,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

依賴添加

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

一些較老版本的SpringBoot需要添加相關依賴,我使用的2.1.4發行版不用這個操作。

驗證使用對象接收參數的情況

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;
}

首先在需要驗證的對象的對應字段上方加上校驗注解,以下為一些常用注解:

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

之后在controller方法的對象參數前加@Valid注解。

校驗使用單個參數接受的情況

@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注解,之后在方法中需要校驗的參數前加上對應的校驗注解進行校驗。

對校驗產生的異常的捕獲

定義全局異常處理類并用@ControllerAdvice標注,由于對象和單個參數因校驗產生的異常類型不同,因此需要分別處理。

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

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

對于使用單個參數接受前端請求,因校驗產生的異常類為ConstraintViolationException,示例方法如下:

/**
 * 捕獲303對于request param單個參數的校驗
 * @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);
}

上述內容就是SpringBoot如何使用jsr303校驗,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云和县| 商都县| 隆尧县| 扬中市| 江陵县| 玉龙| 洞头县| 汶川县| 卓资县| 桦甸市| 莲花县| 库伦旗| 调兵山市| 称多县| 化州市| 泗水县| 枝江市| 抚顺县| 尼木县| 平阳县| 临夏市| 清新县| 天津市| 丹阳市| 灌阳县| 紫金县| 湄潭县| 若羌县| 台南市| 教育| 张掖市| 廊坊市| 万宁市| 稻城县| 柳江县| 通江县| 醴陵市| 抚顺县| 哈巴河县| 文昌市| 松溪县|