前端给后端传数据包,前端明明有值,后端接收到的却是空的。
前端用postman模拟:


后端代码:
接口:

接口参数MentionDTO

结果显示被@Valid检测出数据是空的了:

我打印过,后端数据全是空的,排查了好久了,帮帮我吧T T
前端给后端传数据包,前端明明有值,后端接收到的却是空的。
前端用postman模拟:





下午好🌅🌅🌅
本答案参考通义千问
你描述的问题非常常见,尤其是在前后端交互中,前端传了数据,但后端接收为空。这个问题可能由多种原因引起,下面我将从多个角度分析并给出详细的排查步骤和解决方案。
@PostMapping 或 @RequestMapping(method = RequestMethod.POST)加粗重点:POST 请求的数据应该放在 request body 中,而不是 URL 参数中。
Content-Type: application/json加粗重点:如果前端没有设置正确的 Content-Type,后端会认为不是 JSON 数据,导致参数为空。
MentionDTO 类中的字段名完全一致。{"name": "John", "age": 25}public class MentionDTO {
private String name;
private int age;
// getters and setters
}
加粗重点:字段名不一致会导致 Spring 无法映射数据,最终导致值为空。
" " 而不是单引号 ' '{} 和 []加粗重点:格式错误的 JSON 会导致后端无法解析,从而返回空值。
@RequestBody@RequestBody 来接收:@PostMapping("/save")
public ResponseEntity<?> save(@RequestBody @Valid MentionDTO dto) {
// ...
}
加粗重点:如果没有使用
@RequestBody,Spring 会尝试从 URL 参数中获取数据,导致值为空。
@Valid 是否导致字段为空@Valid 校验失败,Spring 可能会抛出异常,也可能在某些情况下将字段设为空。Method argument not valid: org.springframework.validation.BeanPropertyBindingResult: 1 errors
加粗重点:确保
@Valid校验规则正确,避免因为校验失败导致字段被置空。
spring-boot-starter-web 依赖,否则无法处理 JSON 数据。ObjectMapper,检查是否配置了正确的序列化/反序列化规则。http://localhost:8080/saveContent-Type: application/json
{
"name": "John",
"age": 25
}
@RestController
@RequestMapping("/api")
public class MentionController {
@PostMapping("/save")
public ResponseEntity<String> save(@RequestBody @Valid MentionDTO dto) {
System.out.println("Received DTO: " + dto); // 打印接收到的数据
return ResponseEntity.ok("Success");
}
}
public class MentionDTO {
@NotBlank(message = "Name is required")
private String name;
@Min(0)
private int age;
// Getters and Setters
}
| 错误现象 | 原因 | 解决方案 |
|----------|------|----------|
| 后端接收值为空 | 没有设置 Content-Type: application/json | 设置请求头为 application/json |
| 后端接收值为空 | 字段名不一致 | 确保 JSON 字段名与 DTO 类一致 |
| 后端接收值为空 | 没有使用 @RequestBody | 添加 @RequestBody 注解 |
| @Valid 校验失败 | 字段不符合约束条件 | 修改校验规则或提供合法数据 |
打印接收到的原始 JSON 数据
request.getReader().lines().collect(Collectors.joining()),确认是否真的收到了数据。使用 Postman 测试接口
查看日志
如果你愿意,可以贴出你的前端请求截图、后端 DTO 类和 Controller 代码,我可以帮你更具体地定位问题。希望这些内容对你有帮助!💪