亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring boot進(jìn)行參數(shù)校驗的方法實例詳解

 更新時間:2018年05月05日 15:06:10   作者:大神帶我來搬磚  
這篇文章主要介紹了Spring boot進(jìn)行參數(shù)校驗的方法實例詳解,非 常不錯,具有參考借鑒價值,需要的朋友參考下吧

Spring boot開發(fā)web項目有時候我們需要對controller層傳過來的參數(shù)進(jìn)行一些基本的校驗,比如非空、整數(shù)值的范圍、字符串的長度、日期、郵箱等等。Spring支持JSR-303 Bean Validation API,可以方便的進(jìn)行校驗。

使用注解進(jìn)行校驗

先定義一個form的封裝對象

class RequestForm {
  @Size(min = 1, max = 5)
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

其中name這個字段用Size注解限制長度1到5。Size是javax.validation包中的constraint注解。

 在使用時用@Valid注解表示要校驗這個bean。

  @ResponseBody
  @GetMapping(value = "bean")
  public String validate(@Valid RequestForm request) {
    System.out.println(request.getName());
    return "OK";
  }

自定義注解

如果內(nèi)置的注解不夠用,可以自定義注解。

 比如先定義一個注解NameConstraint,限制name字段只能從特定數(shù)據(jù)中選取。

@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NameConstraintValidator.class)
@interface NameConstraint {
  String[] allowedValues();
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
  String message();
}

其中allowedValues表示合法的取值范圍,message是校驗失敗的顯示信息。

message、groups、payload是hibernate validator要求的字段,想了解的請看官方文檔

 再定義一個validator做真正的校驗

class NameConstraintValidator implements ConstraintValidator<NameConstraint, String> {
  private String[] validValues;
  @Override
  public void initialize(NameConstraint constraintAnnotation) {
    validValues = constraintAnnotation.allowedValues();
  }
  @Override
  public boolean isValid(String value, ConstraintValidatorContext context) {
    for (String s : this.validValues) {
      if (s.equals(value)) {
        return true;
      }
    }
    return false;
  }
}

在form bean中按如下方式使用

class RequestFormWithCustomConstraint {
  @NameConstraint(allowedValues = { "bar", "foo" }, message = "只允許bar,foo")
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

直接校驗參數(shù)

只有一個name字段,不想封裝一個對象怎么辦?可以直接校驗該參數(shù)

@Controller
@Validated
@RequestMapping(value = "validator")
public class ParameterValidatorDemoController {
  @ResponseBody
  @GetMapping(value = "simple")
  public String validateParameter(@Size(min = 1, max = 5) String name) {
    System.out.println(name);
    return "OK";
  }
}

controller上面的@Validated注解則告訴spring需要掃描這個類,來檢查其中的constraint注解。

詳細(xì)信息可以參考官方文檔有關(guān)章節(jié)

https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-validation
https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#validation-beanvalidation

代碼在github

https://github.com/kabike/spring-boot-demo

總結(jié)

以上所述是小編給大家介紹的Spring boot進(jìn)行參數(shù)校驗的方法實例詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • 深入理解Java new String()方法

    深入理解Java new String()方法

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java new String()展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java流形式返回前端的實現(xiàn)示例

    Java流形式返回前端的實現(xiàn)示例

    ? Java后端開發(fā)項目時,需要給前端傳一些數(shù)據(jù),本文主要介紹了Java流形式返回前端的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 使用IntelliJ IDEA2020.2.2 x64 新建java項目并且輸出Hello World

    使用IntelliJ IDEA2020.2.2 x64 新建java項目并且輸出Hello World

    這篇文章主要介紹了使用IntelliJ IDEA2020.2.2 x64 新建java項目并且輸出Hello World,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 一步步教你JAVA如何優(yōu)化Elastic?Search

    一步步教你JAVA如何優(yōu)化Elastic?Search

    想要榨干Java操作Elasticsearch的所有性能潛力?本指南將一步步教你如何優(yōu)化Java與Elasticsearch的交互!從此,提升ES查詢速度、降低資源消耗不再是難題,趕快一起來探索Java?Elasticsearch優(yōu)化的秘訣吧!
    2024-01-01
  • Java8新特性之默認(rèn)方法和靜態(tài)方法

    Java8新特性之默認(rèn)方法和靜態(tài)方法

    這篇文章主要給大家介紹了關(guān)于Java8新特性之默認(rèn)方法和靜態(tài)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Spring中實現(xiàn)的三種異步流式接口方法

    Spring中實現(xiàn)的三種異步流式接口方法

    在現(xiàn)代Web開發(fā)中,接口超時是一個常見的問題,尤其是在處理耗時操作時,傳統(tǒng)的同步接口在處理長時間任務(wù)時會阻塞請求線程,從而影響系統(tǒng)的響應(yīng)能力,本文將詳細(xì)講解Spring中實現(xiàn)的三種異步流式接口方法,需要的朋友可以參考下
    2024-10-10
  • idea中database不顯示問題的解決

    idea中database不顯示問題的解決

    這篇文章主要介紹了idea中database不顯示問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot將Bean放入容器的五種方式

    SpringBoot將Bean放入容器的五種方式

    這篇文章給大家介紹了SpringBoot將Bean放入容器的五種方式,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Java實現(xiàn)動態(tài)創(chuàng)建類操作示例

    Java實現(xiàn)動態(tài)創(chuàng)建類操作示例

    這篇文章主要介紹了Java實現(xiàn)動態(tài)創(chuàng)建類操作,結(jié)合完整示例形式分析了Java動態(tài)創(chuàng)建類的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • Java TreeSet實現(xiàn)學(xué)生按年齡大小和姓名排序的方法示例

    Java TreeSet實現(xiàn)學(xué)生按年齡大小和姓名排序的方法示例

    這篇文章主要介紹了Java TreeSet實現(xiàn)學(xué)生按年齡大小和姓名排序的方法,涉及java類型轉(zhuǎn)換、遍歷、比較等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09

最新評論