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

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

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

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

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

先定義一個(gè)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這個(gè)字段用Size注解限制長度1到5。Size是javax.validation包中的constraint注解。

 在使用時(shí)用@Valid注解表示要校驗(yàn)這個(gè)bean。

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

自定義注解

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

 比如先定義一個(gè)注解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是校驗(yàn)失敗的顯示信息。

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

 再定義一個(gè)validator做真正的校驗(yàn)

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

直接校驗(yàn)參數(shù)

只有一個(gè)name字段,不想封裝一個(gè)對象怎么辦?可以直接校驗(yàn)該參數(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需要掃描這個(gè)類,來檢查其中的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ù)校驗(yàn)的方法實(shí)例詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

最新評論

缙云县| 玉溪市| 光泽县| 称多县| 许昌市| 阜康市| 当阳市| 塔城市| 开封市| 阿克| 涡阳县| 应城市| 望都县| 赤城县| 西乌| 花莲县| 石嘴山市| 射洪县| 葵青区| 延安市| 稻城县| 招远市| 乌拉特后旗| 工布江达县| 原平市| 西昌市| 涟水县| 玉溪市| 冀州市| 凉城县| 新津县| 临汾市| 巩义市| 清远市| 枣强县| 杨浦区| 恩施市| 句容市| 青州市| 兴宁市| 济阳县|