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

spring boot validation參數(shù)校驗實例分析

 更新時間:2019年11月07日 09:47:43   作者:蒼青浪  
這篇文章主要介紹了spring boot validation參數(shù)校驗,結(jié)合實例形式分析了spring boot validation進行數(shù)據(jù)有效性驗證的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了spring boot validation參數(shù)校驗。分享給大家供大家參考,具體如下:

對于任何一個應(yīng)用而言在客戶端做的數(shù)據(jù)有效性驗證都不是安全有效的,這時候就要求我們在開發(fā)的時候在服務(wù)端也對數(shù)據(jù)的有效性進行驗證。 Spring Boot自身對數(shù)據(jù)在服務(wù)端的校驗有一個比較好的支持,它能將我們提交到服務(wù)端的數(shù)據(jù)按照我們事先的約定進行數(shù)據(jù)有效性驗證。

1 pom依賴

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

2 校驗使用實例

  • 配置要驗證的請求實體
public class User {
  @Null
  private Long id;
  @NotBlank
  private String name;
  @Email
  private String email;
  // 省略getter和setter
}

  • 控制器方法配置
@PostMapping("/addUser")
public String addUser(@Valid @RequestBody User user){
  ...
}

  • 校驗失敗統(tǒng)一處理

校驗失敗時將拋出MethodArgumentNotValidException異常

/**
 * 全局Exception處理
 *
 * @author liusq
 *
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
  private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  @SuppressWarnings("rawtypes")
  @ExceptionHandler(value = Exception.class)
  public ResponseEntity handle(Exception e) {
    if (e instanceof MethodArgumentNotValidException) {
      BindingResult bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
      if (bindingResult.hasErrors() && bindingResult.hasFieldErrors()) {
        FieldError fieldError = bindingResult.getFieldError();
        BodyValidStatus bodyValidStatus = new BodyValidStatus.Builder().code("0009")
            .message(fieldError.getDefaultMessage())
            .field(fieldError.getField()).build();
        LOGGER.warn(bodyValidStatus.getMessage() + e);
        return new ResponseEntity<>(bodyValidStatus, HttpStatus.OK);
      } else {
        bodyStatus = DataUtil.bodyStatus("0009");
      }
    } else {
      bodyStatus = DataUtil.bodyStatus(Constants.ERROR_CODE);
    }
    LOGGER.error(bodyStatus.getMessage() + e);
    return new ResponseEntity<>(bodyStatus, HttpStatus.OK);
  }
}
public class BodyValidStatus {
  // 錯誤代碼
  private String code;
  // 錯誤代碼解釋
  private String message;
  // 錯誤字段
  private String field;
  public BodyValidStatus() {
  }
  public BodyValidStatus(String code, String message, String field) {
    this.code = code;
    this.message = message;
    this.field = field;
  }
  private BodyValidStatus(Builder builder) {
    setCode(builder.code);
    setMessage(builder.message);
    setField(builder.field);
  }
  public String getCode() {
    return code;
  }
  public void setCode(String code) {
    this.code = code;
  }
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
  public String getField() {
    return field;
  }
  public void setField(String field) {
    this.field = field;
  }
  @Override
  public String toString() {
    return ToStringBuilder.reflectionToString(this);
  }
  public static final class Builder {
    private String code;
    private String message;
    private String field;
    public Builder() {
    }
    public Builder code(String val) {
      code = val;
      return this;
    }
    public Builder message(String val) {
      message = val;
      return this;
    }
    public Builder field(String val) {
      field = val;
      return this;
    }
    public BodyValidStatus build() {
      return new BodyValidStatus(this);
    }
  }
}

3 驗證注解詳解

驗證注解

驗證的數(shù)據(jù)類型

說明

空檢查

@Null

任意類型

驗證注解的元素值是null

@NotNull

任意類型

驗證注解的元素不是null

@NotBlank

CharSequence子類型(CharBuffer、String、StringBuffer、StringBuilder)

驗證注解的元素值不為空(不為null、去除首尾空格后長度不為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時會去除字符串的首尾空格

@NotEmpty

CharSequence子類型、Collection、Map、數(shù)組

驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)

Boolean檢查

@AssertFalse

Boolean,boolean

驗證注解的元素值是false

@AssertTrue

Boolean,boolean

驗證注解的元素值是true

長度檢查

@Size(min=下限, max=上限)

字符串、Collection、Map、數(shù)組等

驗證注解的元素值的在min和max(包含)指定區(qū)間之內(nèi),如字符長度、集合大小

@Length(min=下限, max=上限)

CharSequence子類型

驗證注解的元素值長度在min和max區(qū)間內(nèi)

日期檢查

@Past

java.util.Date,java.util.Calendar;Joda Time類庫的日期類型

驗證注解的元素值(日期類型)比當(dāng)前時間早

@Future

與@Past要求一樣

驗證注解的元素值(日期類型)比當(dāng)前時間晚

數(shù)值檢查

@MIN(value=值)

BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存儲的是數(shù)字)子類型

驗證注解的元素值大于等于@Min指定的value值

@MAX(value=值)

和@Min要求一樣

驗證注解的元素值小于等于@Max指定的value值

@DecimalMin(value=值)

和@Min要求一樣

驗證注解的元素值大于等于@ DecimalMin指定的value值

@DecimalMax(value=值)

和@Min要求一樣

驗證注解的元素值小于等于@ DecimalMax指定的value值

@Digits(integer=整數(shù)位數(shù), fraction=小數(shù)位數(shù))

和@Min要求一樣

驗證注解的元素值的整數(shù)位數(shù)和小數(shù)位數(shù)上限

@Range(min=最小值, max=最大值)

BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子類型和包裝類型

驗證注解的元素值在最小值和最大值之間

其他檢查

@Valid

任何非原子類型

指定遞歸驗證關(guān)聯(lián)的對象;如用戶對象中有個地址對象屬性,如果想在驗證用戶對象時一起驗證地址對象的話,在地址對象上加@Valid注解即可級聯(lián)驗證

@Pattern(regexp=正則表達式,flag=標(biāo)志的模式)

CharSequence的子類型

驗證注解的元素值與指定的正則表達式匹配

@Email(regexp=正則表達式,flag=標(biāo)志的模式)

CharSequence的子類型

驗證注解的元素值是Email,也可以通過regexp和flag指定自定義的email格式

@CreditCardNumber

CharSequence的子類型

驗證注解元素值是信用卡卡號

@ScriptAssert(lang= ,script=)

業(yè)務(wù)類

校驗復(fù)雜的業(yè)務(wù)邏輯

4 自定義驗證注解和驗證規(guī)則

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import com.xxx.xxx.constraint.impl.MoneyValidator;
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MoneyValidator.class)
public @interface Money {
  String message() default"不是金額形式";
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
}
import java.util.regex.Pattern;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import com.xxx.xxx.constraint.Money;
public class MoneyValidator implements ConstraintValidator<Money, Double> {
  private String moneyReg = "^\\d+(\\.\\d{1,2})?$";//表示金額的正則表達式
  private Pattern moneyPattern = Pattern.compile(moneyReg);
  public void initialize(Money money) {
    // TODO Auto-generated method stub
  }
  public boolean isValid(Double value, ConstraintValidatorContext arg1) {
    // TODO Auto-generated method stub
    if (value == null)
      return true;
    return moneyPattern.matcher(value.toString()).matches();
  }
}

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Spring框架入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Java中@valid和@Validated注解的使用詳解

    Java中@valid和@Validated注解的使用詳解

    這篇文章主要介紹了Java中@valid和@Validated注解的使用詳解,@Validated可以用在類型、方法和方法參數(shù)上,但是不能用在成員屬性(字段)上,不支持嵌套檢測,@Valid可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性(字段)上,支持嵌套檢測,需要的朋友可以參考下
    2024-01-01
  • Java實戰(zhàn)之課程信息管理系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之課程信息管理系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了如何利用Java實現(xiàn)課程信息管理系統(tǒng),文中采用到的技術(shù)有:Springboot、SpringMVC、MyBatis、FreeMarker等,感興趣的可以了解一下
    2022-04-04
  • springboot源碼中this::selfInitialize怪異用法的含義解析

    springboot源碼中this::selfInitialize怪異用法的含義解析

    這篇文章主要介紹了springboot源碼中this::selfInitialize怪異用法的含義解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java中channel用法總結(jié)

    Java中channel用法總結(jié)

    這篇文章主要介紹了Java中channel用法,較為詳細的總結(jié)了channel的定義、類型及使用技巧,需要的朋友可以參考下
    2015-06-06
  • java文件輸出流寫文件的幾種方法

    java文件輸出流寫文件的幾種方法

    這篇文章主要介紹了java文件輸出流寫文件的幾種方法,需要的朋友可以參考下
    2014-04-04
  • Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實例

    Java用POI解析excel并獲取所有單元格數(shù)據(jù)的實例

    下面小編就為大家?guī)硪黄狫ava用POI解析excel并獲取所有單元格數(shù)據(jù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 使用Java實現(xiàn)解析Excel公式

    使用Java實現(xiàn)解析Excel公式

    在日常工作中,我們經(jīng)常需要在Excel中使用公式對表中數(shù)據(jù)進行計算和分析,所以本文小編主要來和大家介紹一下如何在Java中實現(xiàn)解析Excel公式,感興趣的可以了解下
    2024-02-02
  • 徹底搞懂Java多線程(四)

    徹底搞懂Java多線程(四)

    這篇文章主要給大家介紹了關(guān)于Java面試題之多線程和高并發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • IDEA配置tomcat服務(wù)器全過程

    IDEA配置tomcat服務(wù)器全過程

    這篇文章主要介紹了IDEA配置tomcat服務(wù)器全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java模擬hibernate一級緩存示例分享

    java模擬hibernate一級緩存示例分享

    這篇文章主要介紹了java模擬hibernate一級緩存示例,需要的朋友可以參考下
    2014-03-03

最新評論