通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

Spring实操带练:SpringBoot 如何进行参数校验

Spring实操带练:SpringBoot 如何进行参数校验

在进行SpringBoot开发时,参数校验是确保应用健壮性和防止恶意输入的重要手段。使用SpringBoot进行参数校验可以分为几个关键步骤:引入依赖、使用注解、分组验证、自定义校验规则。特别地,使用注解进行参数校验是最为直接和常见的方法。它支持通过在Controller层的方法参数上加注解的方式来声明需要校验的规则,如@NotNull、@Size等,SpringBoot会自动应用这些校验规则。

一、INTRODUCING DEPENDENCIES

要在SpringBoot项目中启用参数校验,首先需要确保有合适的校验框架依赖。SpringBoot推荐使用Hibernate Validator,这是Jakarta Bean Validation的一个实现。

  1. 在项目的pom.xml文件中,引入Hibernate Validator的依赖,如果使用的是Spring Boot starter web,它默认已经包含了所需的校验器实现。

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

  2. 对于需要更复杂验证逻辑的场合,可能还需额外引入EL表达式支持:

    <dependency>

    <groupId>org.hibernate.validator</groupId>

    <artifactId>hibernate-validator</artifactId>

    </dependency>

    <dependency>

    <groupId>org.glassfish</groupId>

    <artifactId>jakarta.el</artifactId>

    </dependency>

二、ANNOTATIONS FOR VALIDATION

参数校验的核心在于合理使用注解。在SpringBoot中,常用的校验注解包括@NotNull、@Min、@Max、@Size、@EmAIl等,分别适用于不同的校验场景。

  1. 在实体类或DTO中将这些注解应用于相应的成员变量上,以指定校验规则。例如,以下代码段利用@NotNull和@Size注解确保name字段在接收用户输入时非空且长度在2到30字符之间。

    public class User {

    @NotNull(message = "Name cannot be null")

    @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")

    private String name;

    // getters and setters

    }

  2. 在Controller层,配合@Valid或@Validated注解使用,来触发绑定到对象上的注解校验规则。

    @PostMapping("/users")

    public ResponseEntity<String> createUser(@Valid @RequestBody User user) {

    // business logic

    return ResponseEntity.ok("User is valid");

    }

三、GROUPING VALIDATIONS

分组校验允许你在不同场景下应用不同的校验规则,这是通过定义校验分组来实现的。

  1. 创建分组接口以代表不同的校验场景。

    public interface OnCreate {}

    public interface OnUpdate {}

  2. 在模型中,使用groups属性指定注解在哪些分组下应用。

    public class User {

    @NotNull(groups = OnCreate.class, message = "Name cannot be null on creation")

    @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")

    private String name;

    // getters and setters

    }

  3. 在Controller中,通过指定@Validated的value属性来使用分组。

    @PostMapping("/users")

    public ResponseEntity<String> createUser(@Validated(OnCreate.class) @RequestBody User user) {

    // business logic

    return ResponseEntity.ok("User is validated for creation");

    }

四、CUSTOM VALIDATION RULES

虽然SpringBoot提供了许多内置校验注解,但有时业务需求可能需要自定义校验规则。

  1. 定义一个注解和对应的校验器。

    @Target({ ElementType.METHOD, ElementType.FIELD })

    @Retention(RetentionPolicy.RUNTIME)

    @Constraint(validatedBy = CustomConstraintValidator.class)

    public @interface CustomConstraint {

    String message() default "Invalid value";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    }

  2. 实现ConstraintValidator接口,定义校验逻辑。

    public class CustomConstraintValidator implements ConstraintValidator<CustomConstraint, String> {

    @Override

    public boolean isValid(String value, ConstraintValidatorContext context) {

    // Custom validation logic

    return value != null && value.matches("some-regex");

    }

    }

  3. 应用自定义注解。

    public class User {

    @CustomConstraint(message = "Custom message for invalid values")

    private String customField;

    // getters and setters

    }

通过这些步骤,可以实现在SpringBoot中对参数进行有效的校验,从而提高应用的稳定性和安全性。

相关问答FAQs:

1. SpringBoot中如何进行参数校验的具体步骤是什么?
参数校验是一个重要的安全措施,可以防止恶意用户提交无效或错误的数据。在SpringBoot中,可以使用JSR-303规范中的注解来进行参数校验。步骤如下:

  • 在实体类中使用注解来标记需要校验的字段,例如@NotBlank、@NotNull等。
  • 在Controller方法中使用@Valid注解来启用参数校验,并通过BindingResult对象获取校验结果。
  • 根据校验结果进行相应的处理,例如返回错误信息。

2. SpringBoot中的参数校验有哪些常用的注解?
SpringBoot中提供了多种常用的注解来进行参数校验,例如:

  • @NotBlank:校验字符串非空且长度大于0;
  • @NotNull:校验对象非空;
  • @Min:校验数字大于等于指定值;
  • @Max:校验数字小于等于指定值;
  • @Pattern:校验字符串是否匹配指定的正则表达式。

3. SpringBoot中参数校验失败时如何处理?
当参数校验失败时,可以通过异常处理机制来进行处理。在SpringBoot中,可以使用@ControllerAdvice注解来定义一个全局的异常处理类,并在其中定义相应的处理方法。在处理方法中可以根据异常类型来返回自定义的错误信息,例如返回一个包含错误码和错误提示的JSON对象。另外,也可以在处理方法中使用统一的错误页面进行展示。

相关文章