抽象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 规范)
posted @ 2025-04-18 18:13  遇事不决先睡觉  阅读(143)  评论(0)    收藏  举报