• SpringBoot 如何进行参数校验?


    在Spring Boot中进行参数校验通常是使用JSR 303规范(也称为Bean Validation)的注解和Spring的Validation API来完成的。以下是一些常见的步骤和示例,用于在Spring Boot应用程序中进行参数校验:

    1. 添加依赖:
      首先,确保在项目的pom.xml文件中添加以下依赖,以引入Spring Boot和Bean Validation相关的库:

      <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starter-webartifactId>
      dependency>
      <dependency>
          <groupId>javax.validationgroupId>
          <artifactId>validation-apiartifactId>
      dependency>
      <dependency>
          <groupId>org.hibernate.validatorgroupId>
          <artifactId>hibernate-validatorartifactId>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    2. 创建DTO类(数据传输对象):
      在你的应用中创建一个DTO类,该类用于接收和验证请求参数。在DTO类的字段上使用Bean Validation注解来指定参数校验规则。例如:

      import javax.validation.constraints.NotBlank;
      import javax.validation.constraints.Positive;
      
      public class UserDTO {
          @NotBlank(message = "用户名不能为空")
          private String username;
          
          @Positive(message = "年龄必须为正整数")
          private int age;
          
          // Getter和Setter方法
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

    在Java中,Bean Validation提供了一组常见的约束注解,用于对数据进行校验。以下是一些常见的约束注解:

    1. @NotNull: 用于标记字段不能为null。
    2. @NotEmpty: 用于标记字段不能为空,可以用于字符串、集合、数组等。
    3. @NotBlank: 用于标记字符串字段不能为空且必须至少包含一个非空格字符。
    4. @Size(min, max): 用于指定字符串、集合或数组的大小必须在指定的范围内。
    5. @Min(value): 用于标记数值字段的最小值。
    6. @Max(value): 用于标记数值字段的最大值。
    7. @DecimalMin(value): 用于标记十进制数值字段的最小值。
    8. @DecimalMax(value): 用于标记十进制数值字段的最大值。
    9. @Digits(integer, fraction): 用于指定数值字段的整数和小数部分的最大位数。
    10. @Pattern(regexp): 用于标记字符串字段必须匹配指定的正则表达式。
    11. @Email: 用于标记字符串字段必须是有效的电子邮件地址格式。
    12. @Future@FutureOrPresent: 用于标记日期字段必须是将来的日期或将来或当前日期。
    13. @Past@PastOrPresent: 用于标记日期字段必须是过去的日期或过去或当前日期。
    14. @AssertTrue@AssertFalse: 用于标记字段必须为true或false。
    15. @Positive@PositiveOrZero: 用于标记数值字段必须为正数或正数或零。
    16. @Negative@NegativeOrZero: 用于标记数值字段必须为负数或负数或零。

    这些约束注解可以根据需要单独或组合使用,以对不同类型的数据进行校验。在Spring Boot应用程序中,你可以使用这些注解来定义DTO(数据传输对象)或实体类的字段上,然后通过@Valid注解来触发校验,确保数据的有效性和一致性。

    1. 在控制器中使用DTO:
      在你的控制器中,使用上面创建的DTO类作为请求参数,Spring Boot将自动执行参数校验并将错误信息返回给客户端。例如:

      import org.springframework.web.bind.annotation.*;
      
      @RestController
      @RequestMapping("/api/users")
      public class UserController {
      
          @PostMapping("/create")
          public ResponseEntity<String> createUser(@Valid @RequestBody UserDTO userDTO) {
              // 处理创建用户的逻辑
              return ResponseEntity.ok("用户创建成功");
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      在上面的示例中,@Valid注解用于告诉Spring Boot对UserDTO对象进行参数校验,如果校验失败,将会返回一个包含错误信息的响应。

    2. 自定义错误处理(可选):
      你可以创建一个全局异常处理器来自定义处理参数校验失败的错误。例如:

      import org.springframework.http.HttpStatus;
      import org.springframework.http.ResponseEntity;
      import org.springframework.web.bind.MethodArgumentNotValidException;
      import org.springframework.web.bind.annotation.*;
      
      @ControllerAdvice
      public class GlobalExceptionHandler {
      
          @ExceptionHandler(MethodArgumentNotValidException.class)
          public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException ex) {
              String errorMessage = ex.getBindingResult().getFieldErrors().get(0).getDefaultMessage();
              return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMessage);
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      在上面的例子中,我们捕获了MethodArgumentNotValidException异常,该异常会在参数校验失败时抛出,然后我们从异常中提取出错误信息并返回一个包含错误消息的BAD_REQUEST响应。

  • 相关阅读:
    京源转债上市价格预测
    RDP协议流程详解(概述)
    如何开发OA系统场景的系统架构
    Python学习基础笔记七十四——字典
    高考杂志高考杂志社高考编辑部2024年第14期目录
    优秀案例 | 三峡游客中心AI交互数字人“鲟侠船长”,数实融合赋能景区沉浸游玩体验
    【eigen】解决报错 return type of RCmpEQReturnType Eigen::operator== is not ‘bool’
    TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案
    OpenCV视频车流量识别详解与实践
    朴素贝叶斯分类器_以python为工具【Python机器学习系列(十三)】
  • 原文地址:https://blog.csdn.net/qq_27575627/article/details/133611590