Spring Boot POST接口@NotBlank校验失效:doorNumber/block字段报错求助
POST接口@NotBlank校验异常排查
错误现象
测试POST接口时返回MethodArgumentNotValidException,提示doorNumber和block字段不能为空,但请求体中已传入doorNumber参数。
问题根源及修复方案
1. doorNumber字段的JavaBean规范问题
在OrderDto类中,doorNumber的getter和setter方法命名不符合JavaBean标准:
// 错误写法 public String doorNumber() { return doorNumber; } public void doorNumber(String doorName) { this.doorNumber = doorName; }
Spring的消息转换器依赖标准的JavaBean命名规则(getXxx()/setXxx())解析请求体参数,非标准命名会导致参数无法正确绑定,最终doorNumber值为null,触发@NotBlank校验。
修正为标准命名:
public String getDoorNumber() { return doorNumber; } public void setDoorNumber(String doorNumber) { this.doorNumber = doorNumber; }
2. block字段的校验规则与业务不匹配
- 从
OrderModel的block字段定义(@Column(length = 5))来看,该字段允许为空; - 但
OrderDto中给block添加了@NotBlank注解,强制要求字段非空; - 同时请求体中未传入
block参数,因此触发校验错误。
修复方案二选一:
- 如果业务允许
block为空,移除OrderDto中block字段的@NotBlank注解; - 如果业务要求
block必填,在请求体中补充block参数。
额外注意
检查OrderModel的setOrderNote方法,存在赋值错误:
// 错误写法 public void setOrderNote(String order) { this.orderNote = orderNote; }
应修正为:
public void setOrderNote(String orderNote) { this.orderNote = orderNote; }
内容的提问来源于stack exchange,提问作者Routfin
相关产品推荐
相关产品推荐

