Spring Boot 参数校验方法实例详解 在 Spring Boot 开发 Web 项目中,参数校验是非常重要的一步骤。我们需要对 Controller 层传过来的参数进行一些基本的校验,如非空、整数值的范围、字符串的长度、日期、邮箱等等。Spring 框架提供了多种方法来实现参数校验,本文将介绍其中的一些方法实例。 使用 JSR-303 Bean Validation API 进行校验 Spring 框架支持 JSR-303 Bean Validation API,可以方便地进行校验。我们可以使用注解来定义校验规则。例如,使用 `@Size` 注解来限制字符串的长度: ```java class RequestForm { @Size(min = 1, max = 5) private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` 在上面的代码中,我们定义了一个名为 `RequestForm` 的类,其中包含一个名为 `name` 的字段,并使用 `@Size` 注解来限制其长度在 1 到 5 之间。 使用 @Valid 注解进行校验 在 Controller 层,我们可以使用 `@Valid` 注解来表示要校验这个 bean。例如: ```java @ResponseBody @GetMapping(value = "bean") public String validate(@Valid RequestForm request) { System.out.println(request.getName()); return "OK"; } ``` 在上面的代码中,我们使用 `@Valid` 注解来表示要校验 `RequestForm` 对象。如果校验失败,将抛出异常。 自定义注解 如果内置的注解不够用,我们可以自定义注解。例如,定义一个名为 `NameConstraint` 的注解,限制 `name` 字段只能从特定数据中选取: ```java @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(); } ``` 在上面的代码中,我们定义了一个名为 `NameConstraint` 的注解,其中包含一个名为 `allowedValues` 的字段,表示合法的取值范围。 自定义 Validator 接下来,我们需要定义一个 Validator 来真正地进行校验。例如: ```java 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; } } ``` 在上面的代码中,我们定义了一个名为 `NameConstraintValidator` 的 Validator,用于真正地进行校验。 使用自定义注解 在 Form Bean 中,我们可以使用自定义注解来定义校验规则。例如: ```java 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; } } ``` 在上面的代码中,我们使用自定义注解 `NameConstraint` 来限制 `name` 字段只能取特定值。 直接校验参数 如果我们不想封装一个对象,可以直接校验参数。例如: ```java @Controller @Validated @RequestMapping(value = "validator") public class ParameterValidator { @GetMapping(value = "param") public String validateParameter(@RequestParam("name") @NameConstraint(allowedValues = { "bar", "foo" }, message = "只允许bar,foo") String name) { return "OK"; } } ``` 在上面的代码中,我们使用自定义注解 `NameConstraint` 来限制 `name` 参数只能取特定值。 Spring Boot 提供了多种方法来实现参数校验,包括使用 JSR-303 Bean Validation API、自定义注解和 Validator 等。开发者可以根据实际情况选择合适的方法来实现参数校验。
- 粉丝: 2
- 资源: 957
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【安卓毕业设计】基于Android的药材管理作业源码(完整前后端+mysql+说明文档).zip
- 计算机科学中贪心算法的深度剖析与经典案例解析
- C#.NET权限管理系统源码 企业基本通用权限框架系统源码数据库 SQL2008源码类型 WebForm
- 【安卓毕业设计】基于Android的学生信息管理源码(完整前后端+mysql+说明文档).zip
- 【安卓毕业设计】模拟爱奇艺本地视频播放器源码(完整前后端+mysql+说明文档).zip
- java-win-jdk17
- Java 应用诊断利器诊断方法执行所需时间
- 【安卓毕业设计】基于Android的在线商城大作业源码(完整前后端+mysql+说明文档).zip
- AVA驾校管理系统源码 驾驶员在线考试系统源码数据库 MySQL源码类型 WebForm
- “公共数据开放”多期DID(2000-2022年).zip