Spring Boot常用的参数验证技巧和使用方法

 更新时间:2023年09月11日 14:49:00   作者:曾几何时…  
Spring Boot是一个使用Java编写的开源框架,用于快速构建基于Spring的应用程序,这篇文章主要介绍了Spring Boot常用的参数验证技巧和使用方法,需要的朋友可以参考下

简介

Spring Boot是一个使用Java编写的开源框架,用于快速构建基于Spring的应用程序。在实际开发中,经常需要对输入参数进行验证,以确保数据的完整性和准确性。Spring Boot提供了多种方式来进行参数验证,并且可以很方便地集成到应用程序中。

1. 使用JSR-303注解进行参数验证

JSR-303是Java Validation API的规范之一,它定义了一套用于参数验证的注解。Spring Boot支持使用这些注解来验证方法参数、请求参数和实体类字段等。

@RestController
public class UserController {
    @PostMapping("/user")
    public ResponseEntity<String> createUser(@Valid @RequestBody UserRequest request) {
        // 处理请求
        return ResponseEntity.ok("User created successfully");
    }
}

在上面的例子中, @Valid 注解用于标记需要验证的参数, @RequestBody 注解用于指定该参数为请求体。而 UserRequest 则是一个自定义的实体类,使用了JSR-303注解来验证字段。

public class UserRequest {
    @NotBlank(message = "用户名不能为空")
    private String username;
    @Size(min = 6, max = 12, message = "密码长度必须在6到12个字符之间")
    private String password;
    // getter 和 setter 方法省略
}

UserRequest 类中,我们使用了 @NotBlank 注解来验证 username 字段不能为空,使用了 @Size 注解来验证 password 字段的长度在6到12个字符之间。当参数验证失败时,框架会自动抛出 MethodArgumentNotValidException 异常,并返回相应的错误信息。

2. 使用自定义验证器

除了使用JSR-303注解外,你还可以编写自己的参数验证器。这对于一些特殊的验证需求,或者需要复杂逻辑的验证场景非常有用。

@Component
public class AgeValidator implements ConstraintValidator<ValidAge, Integer> {
    @Override
    public boolean isValid(Integer age, ConstraintValidatorContext context) {
        // 实现自定义的验证逻辑
        return age >= 18 && age <= 60;
    }
}

首先,我们需要编写一个实现了 ConstraintValidator 接口的验证器类。在上面的例子中,我们定义了一个 AgeValidator 类,用于验证年龄是否在合法范围内(18到60岁)。然后,我们需要在需要验证的地方使用 @ValidAge 注解来标记需要验证的参数。

@RestController
public class UserController {
    @PostMapping("/user")
    public ResponseEntity<String> createUser(@ValidAge @RequestParam("age") Integer age) {
        // 处理请求
        return ResponseEntity.ok("User created successfully");
    }
}

在上述代码中,我们使用了 @ValidAge 注解来验证 age 参数的合法性。当参数验证失败时,框架会自动抛出 MethodArgumentNotValidException 异常,并返回相应的错误信息。

3. 自定义验证错误处理

除了使用框架提供的默认错误处理方式外,你还可以定制化错误处理。可以通过编写全局异常处理器来对参数验证失败时的异常进行捕获和处理。

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) {
        BindingResult result = ex.getBindingResult();
        List<ObjectError> errors = result.getAllErrors();
        StringBuilder errorMessage = new StringBuilder();
        for (ObjectError error : errors) {
            errorMessage.append(error.getDefaultMessage()).append("; ");
        }
        return ResponseEntity.badRequest().body(errorMessage.toString());
    }
}

在上述代码中,我们使用 @ControllerAdvice 注解将该类声明为全局异常处理器,并使用 @ExceptionHandler 注解来指定处理 MethodArgumentNotValidException 异常。当参数验证失败时,会自动进入到这个处理方法中,我们可以从异常对象中获取详细的错误信息并进行处理。

结论

Spring Boot提供了多种灵活且强大的参数验证技巧和使用方法,包括使用JSR-303注解进行参数验证、自定义验证器以及自定义验证错误处理等。通过合理地运用这些技巧,我们可以保证应用程序接收到正确且完整的参数输入,提高系统的稳定性和安全性。

到此这篇关于Spring Boot常用的参数验证技巧和使用方法的文章就介绍到这了,更多相关Spring Boot参数验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Idea SpringBoot搭建SpringCloud的准备工作(推荐)

    详解Idea SpringBoot搭建SpringCloud的准备工作(推荐)

    这篇文章主要介绍了Idea SpringBoot搭建SpringCloud的准备工作(推荐),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • MyBatis中不建议使用where 1=1原因详解

    MyBatis中不建议使用where 1=1原因详解

    这篇文章主要为大家介绍了MyBatis中不建议使用where 1=1的原因详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java实现读取resources目录下的文件路径的九种方式

    Java实现读取resources目录下的文件路径的九种方式

    本文主要介绍了Java实现读取resources目录下的文件路径的九种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Spring中的refreshContext源码分析

    Spring中的refreshContext源码分析

    这篇文章主要介绍了Spring中的refreshContext源码分析,在SpringBoot启动流程中,主要的两个阶段是初始化SpringApplication对象以及SpringApplication.run方法执行的内容,今天主要细讲的是SpringApplication.run中的刷新容器refreshContext方法,需要的朋友可以参考下
    2023-12-12
  • MyBatis-Flex BaseMapper的接口基本用法小结

    MyBatis-Flex BaseMapper的接口基本用法小结

    本文主要介绍了MyBatis-Flex BaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • JavaSE图像验证码简单识别程序详解

    JavaSE图像验证码简单识别程序详解

    这篇文章主要为大家详细介绍了JavaSE图像验证码简单识别程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 一文详解Java过滤器拦截器实例逐步掌握

    一文详解Java过滤器拦截器实例逐步掌握

    这篇文章主要为大家介绍了Java过滤器拦截器实例详解逐步掌握,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • SpringBoot中短时间连续请求时出现Cookie获取异常问题的解决方案

    SpringBoot中短时间连续请求时出现Cookie获取异常问题的解决方案

    在 Spring Boot Web 应用中,每个请求都会携带 HttpServletRequest,其中包含 Cookie 等关键信息,如果某个请求对象的 cookieParsed 标记在异步线程中被错误修改,可能会导致 短时间内的后续请求无法正确解析 Cookie,本文给大家介绍了详细解决方法,需要的朋友可以参考下
    2025-04-04
  • java8中Map的一些骚操作总结

    java8中Map的一些骚操作总结

    这篇文章主要给大家介绍了关于java8中Map的一些骚操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • MyBatis Plus工具快速入门使用教程

    MyBatis Plus工具快速入门使用教程

    这篇文章主要介绍了MyBatis Plus工具快速入门使用教程,需要的朋友可以参考下
    2018-05-05

最新评论