You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot控制器验证失败时如何返回400状态码?

解决Spring Boot路径参数验证失败返回400状态码的方案

原因分析

当前代码里用@Size校验路径变量,但Spring Boot默认不会拦截路径变量的验证异常(ConstraintViolationException),会把它当作服务器内部错误抛出,所以返回500状态码。

具体配置步骤

1. 确认依赖(可选)

Spring Boot Starter Web默认包含Spring Validation依赖,如果是单独维护依赖的项目,确保引入:

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

2. 自定义全局异常处理器

创建全局异常处理类,捕获ConstraintViolationException并返回400状态码:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.stream.Collectors;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    public ResponseEntity<String> handleConstraintViolation(ConstraintViolationException ex) {
        String errorMsg = ex.getConstraintViolations().stream()
                .map(ConstraintViolation::getMessage)
                .collect(Collectors.joining("; "));
        return new ResponseEntity<>(errorMsg, HttpStatus.BAD_REQUEST);
    }
}

3. 调整控制器代码

必须在控制器类上添加@Validated注解,开启方法参数的校验支持,同时可以优化注解的使用:

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.Size;

@RestController
@Validated
public class TestController {

    @GetMapping("/test/{p}")
    public String test(@PathVariable("p") @Size(min = 2, message = "参数长度不能小于2") String t) {
        return "";
    }
}

注:原代码中的@Valid对路径变量校验无作用,@NonNull也可省略(路径变量required=true已保证非空)。

验证效果

  • 传入长度≥2的字符串时,接口返回200状态码;
  • 传入长度<2的字符串时,接口返回400状态码,并携带自定义错误提示。

内容的提问来源于stack exchange,提问作者Rafael Lima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:30:51