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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 交通流建模国赛B题-基于matlab实现三车道交通流元胞自动机+项目源码+文档说明+代码注释+交通流三车道模型
- (源码)基于规则引擎的决策管理系统.zip
- 红外热成像解析程序代码
- C#大型物流管理系统源码 物流综合管理网络平台源码数据库 SQL2008源码类型 WebForm
- (源码)基于Spring Boot和HBase的B站评论区用户分析系统.zip
- 【重磅,更新!】2011-2022年中国分省快递业务量与快递业务收入面板
- (源码)基于汇编与模拟系统的简易链接器模拟器.zip
- (源码)基于ASP.NET Core的校园办公系统.zip
- (源码)基于Spring Boot和Vue的区块链物资管理系统.zip
- 最新Nessus2024.11.10版本主机漏洞扫描/探测工具下载