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

Spring Boot REST API加@Valid注解传合法数据仍返回400错误

问题根因

你遇到的400错误来自两个代码层面的错误,和参数校验逻辑本身无关:

  • @RequestBody注解导错包:你当前导入的是io.swagger.v3.oas.annotations.parameters.RequestBody,这是Swagger/OpenAPI用来生成接口文档的注解,完全不具备HTTP请求体绑定的功能。加上@Valid注解触发参数校验时,Spring无法找到要绑定、校验的请求体对象,直接抛出参数异常返回400。
  • 请求方法使用不符合规范:当前接口使用@GetMapping声明,HTTP GET方法定位是资源查询,按照RFC规范不建议携带请求体,Spring MVC默认对GET请求的JSON请求体解析存在限制,即使修正注解也可能出现参数绑定失败的问题。

你之前移除@Valid后接口能返回结果属于假象:此时Spring没有触发参数绑定+校验的完整流程,方法形参tpj实际为null,根本没有接收到你传入的JSON数据,没有实现预期的参数接收逻辑。

修复方案

按照以下步骤修改即可正常运行:

  1. 替换错误的@RequestBody导包,删除Swagger的RequestBody导入语句,新增Spring Web的官方绑定注解导入:
import org.springframework.web.bind.annotation.RequestBody;
  1. 将接口的@GetMapping注解替换为@PostMapping(JSON请求体应当用POST/PUT/PATCH这类支持请求体的请求方法),修正后的Controller代码如下:
import javax.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import com.magicsoftware.restapi.exception.TestPOJO;

@RestController
@Validated
@RequestMapping(path = "/Test")
public class TestController {

    @PostMapping(value = "/test1")
    public String test1(@Valid @RequestBody TestPOJO tpj) {
        if (tpj instanceof TestPOJO) {
            System.out.println("Correct data format passed ");
        }
        return "working1";
    }
}
  1. Postman测试时将请求方法改为POST,请求头设置Content-Type: application/json,传入你之前的请求体即可正常通过校验,返回200结果。

内容的提问来源于stack exchange,提问作者Dattatray Satpute

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:16:30