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

@NotBlank注解校验失效:请求未触发校验直接返回201问题求助

校验注解未生效,请求返回201而非校验异常

我定义了带校验字段的DTO类,发送缺少必填字段的请求时,预期触发校验异常,但接口返回了201状态码。已经添加了javax.validation依赖,并且在@RequestBody前加了@Valid注解,找不到问题所在。

DTO类代码

import javax.validation.constraints.NotBlank;
import lombok.Data;

@Data
public class AddressDto {
  
  @NotBlank(message = "The country is required.")
  private String country;

  @NotBlank(message = "The city is required.")
  private String city;

  @NotBlank(message = "The Zip code is required.")
  private String zipCode;

  @NotBlank(message = "The street name is required.")
  private String street;

  private String state;
}

Controller类代码

package com.controller;

import com.model.dto.AddressDto;
import javax.validation.Valid;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class AddressController {

  @PostMapping("/test")
  public ResponseEntity<AddressDto> registerUser(@Valid @RequestBody AddressDto registerUserDto) {
    return new ResponseEntity<>(registerUserDto, HttpStatus.CREATED);
  }
}

Postman请求与响应截图

Postman请求与响应

可能的解决方法

  • 检查Spring Boot版本:如果是2.3及以上版本,需额外添加spring-boot-starter-validation依赖。Spring Boot 2.3开始将validation starter从web starter中拆分,仅引入javax.validation依赖不足以启用校验功能。
  • 排查全局异常处理器:若存在自定义全局异常处理器,确认是否捕获了MethodArgumentNotValidException或BindException。如果未处理这类异常,校验失败时的异常可能被吞掉,导致接口仍返回201。需添加对应异常处理逻辑,返回400状态码及校验错误信息。
  • 确认请求参数与DTO字段匹配:检查请求JSON的字段名是否和DTO属性名完全一致(比如驼峰zipCode和小写zipcode的差异),字段不匹配会导致属性值为null,但@NotBlank仅校验空字符串/空白,若字段未被正确映射,可能无法触发校验。
  • 校验注解位置:确保@Valid注解正确加在@RequestBody之前,位置错误会导致校验不生效。
  • 检查校验功能是否开启:确认项目未手动关闭Spring的自动校验配置,Spring Boot默认会自动启用,若手动关闭需添加@EnableValidation注解开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:54:20