java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot校验前端传递参数

SpringBoot校验前端传递的参数的流程步骤

作者:jovanz

在日常项目开发中,我们都知道参数验证是必不可少的一环,但是有时候为了偷懒,把参数校验交给前端开发人员去处理,这样很容易影响系统稳定性和安全性,所以本文给大家介绍了SpringBoot校验前端传递的参数的流程步骤,需要的朋友可以参考下

Spring Boot 参数校验(基于 Hibernate Validator)

1. 简介与依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

自动引入 hibernate-validator + javax.validation-api,无需手动管理版本。

2. 使用方式

校验 @RequestBody(JSON 对象)

@PostMapping("/user")
public Result createUser(@Valid @RequestBody User user) { ... }

校验 @RequestParam / @PathVariable 等

@RestController
@Validated // ← 关键!
public class UserController {
    @GetMapping("/user/{id}")
    public Result getUser(@Min(1) @PathVariable Long id) { ... }
}

最佳实践:Controller 类统一加 @Validated,覆盖所有校验场景。

3. 常用注解

非空校验

范围校验

格式校验

时间校验

4. 全局异常处理器

统一处理校验失败异常,返回结构化错误信息。有了全局异常处理器,前端可以收到规范化的错误信息

@RestControllerAdvice
public class GlobalValidationExceptionHandler {

    // 处理 @RequestBody 校验失败
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ApiResult<Map<String, String>> handleRequestBody(
            MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getFieldErrors()
          .forEach(e -> errors.put(e.getField(), e.getDefaultMessage()));
        return ApiResult.error(400, "参数校验失败").data(errors);
    }

    // 处理 @RequestParam / @PathVariable 校验失败
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ApiResult<Map<String, String>> handleParams(
            ConstraintViolationException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getConstraintViolations().forEach(v ->
            errors.put(v.getPropertyPath().toString(), v.getMessage()));
        return ApiResult.error(400, "参数校验失败").data(errors);
    }
}

返回示例:

{ "code": 400, "message": "参数校验失败", "data": { "name": "姓名不能为空" } }

到此这篇关于SpringBoot校验前端传递的参数的流程步骤的文章就介绍到这了,更多相关SpringBoot校验前端传递参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文