抽象bug-Column 'username' cannot be null
描述
在添加员工信息时,出现错误,属性username不能为0.
在业务处理层打断点调试发现,传过来的对象没有赋值,均为空


原因
在控制层中接受的对象前没有加注解@RequestBody

分析
1.表单数据绑定:
不加@RequestBody时,Spring会尝试从请求参数(URL查询字符串或表单提交的键值对)中绑定到Emp对象的属性。例如,若请求为POST /emp?name=John&age=30,Spring会将name和age映射到Emp对象的对应字段。
JSON数据无法解析:
2.如果前端发送的是application/json格式的请求体,Spring不会自动解析JSON数据到Emp对象。此时Emp对象的属性为null或默认值(如0、false等),导致数据丢失。
@RequestBody的作用
1.POST 请求的数据位置
当客户端发送 POST 请求时,数据通常存储在 请求体(Body) 中(而非 URL 参数)。
对于 JSON 数据,请求头的 Content-Type 需设置为 application/json。
2.Spring 的默认行为
Spring 默认不会自动解析请求体中的数据,需要显式声明需要处理请求体的内容。
| 功能 | 说明 |
|---|---|
| 标识数据来源 | 明确告知 Spring:参数值应从请求体(Body)中获取,而非 URL 参数或表单字段 |
| 触发数据转换 | 根据 Content-Type 自动选择 HttpMessageConverter 解析 JSON 到 Java 对象 |
| 类型安全绑定 | 将 JSON 数据结构映射到目标对象的字段(需符合 Java Bean 规范) |

浙公网安备 33010602011771号