栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring boot进行参数校验的方法实例详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring boot进行参数校验的方法实例详解

Spring boot开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空、整数值的范围、字符串的长度、日期、邮箱等等。Spring支持JSR-303 Bean Validation API,可以方便的进行校验。

使用注解进行校验

先定义一个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";
  }

自定义注解

如果内置的注解不够用,可以自定义注解。

 比如先定义一个注解NameConstraint,限制name字段只能从特定数据中选取。

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

其中allowedValues表示合法的取值范围,message是校验失败的显示信息。

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

 再定义一个validator做真正的校验

class NameConstraintValidator implements ConstraintValidator {
  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;
  }
}

直接校验参数

只有一个name字段,不想封装一个对象怎么办?可以直接校验该参数

@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注解。

详细信息可以参考官方文档有关章节

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

总结

以上所述是小编给大家介绍的Spring boot进行参数校验的方法实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/141003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号