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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 模拟电子技术期末试题及答案.doc
- 模拟电子技术试题及答案.doc
- 小程序项目计划书微信小程序项目计划书.docx
- 软件体系结构期末试题+答案.docx
- 学籍管理系统数据库设计.doc
- 基于智能温度监测系统设计.doc
- 电子幸运转盘数字电子技术课程设计.docx
- 物业管理系统JAVA毕业设计.doc
- 信息系统运行维护服务方案IT运维服务方案.doc
- matlab线性系统的根轨迹绘制
- 手检测4-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 联合建模代码,相位计算代码,电场导出画图代码,以超透镜为案例有讲解视频,视频讲解,代码,文档,透镜,有联合建模代码,相位计算代码 电场观测代码
- 二手车交易:打造安全高效的在线市场
- 一个使用Androidstudio开发的校园通知APP
- Boost型Ladrc控制双闭环电路 双闭环控制 (1)电压外环采用简化Ladrc控制器,简化线性自抗扰控制,采用PD控制+三阶LESO状态观测器, (2)电流内环采用pi控制 其中ladrc控制器可
- ST官方电机库FOC算法