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

SpringBoot接收DTO参数全为null 插入数据库字段为空问题排查

问题诱因分析

该问题核心出在HTTP请求参数到DTO对象的绑定环节,和Service层持久化逻辑无关,常见诱因有3类:

  • Controller接口方法的DTO参数未添加@RequestBody注解:Spring MVC默认会将无注解的实体参数按表单参数、URL Query参数的规则解析,如果你在Postman中发送的是JSON格式请求体,Spring不会主动解析请求体内容反序列化为DTO对象,最终得到的CustomerDTO实例所有字段都是默认值null。这是该问题最高频的诱因。
  • CustomerDTO类缺少必要的结构:DTO类没有无参构造方法、没有对应字段的Getter/Setter方法,会导致Spring反射创建DTO实例、给字段赋值时失败,最终所有字段为null。
  • 请求配置或字段不匹配:Postman请求头未设置Content-Type: application/json、请求体JSON的字段名和CustomerDTO类的属性名拼写/大小写不匹配,也会导致参数绑定失败。
解决方案

按优先级依次排查修复即可:

  1. 给Controller方法的DTO参数添加@RequestBody注解,修正后的方法参考如下(注意不要遗漏自己配置的接口路径映射注解):
@PostMapping("/customer")
public ResponseEntity<Customer> addCustomer(@RequestBody CustomerDTO customer) {
    try {
        System.out.println(customer.getEmail()+"000000000000000000000000");
        Customer newCustomer = customerService
                .addCustomer(new Customer(customer.getSerialNumber(), customer.getFirstName(),customer.getLastName(),customer.getEmail(),customer.getMobileNumber()));
        System.out.println(customer.getEmail()+ "************************");
        return new ResponseEntity<>(newCustomer, HttpStatus.CREATED);
    } catch (Exception e) {
        return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
  1. 检查CustomerDTO类的定义:
    • 必须保留无参构造方法:如果手动写了全参构造,一定要额外补充无参构造;如果使用Lombok简化代码,给类添加@Data和@NoArgsConstructor注解即可自动生成无参构造、所有字段的Getter/Setter方法。
    • 核对DTO内的属性名,确保和Postman传入的JSON字段名完全一致,比如email字段不要写成Email、eMail,驼峰命名不要错写为下划线命名。
  2. 核对Postman请求配置:
    • 请求方法和接口配置的方法一致(新增接口一般为POST)
    • 请求头添加Content-Type: application/json
    • 请求体选择raw类型,下拉选项选JSON,传入的JSON结构参考:
{
    "serialNumber": "CUST001",
    "firstName": "Renad",
    "lastName": "Sahal",
    "email": "renad@example.com",
    "mobileNumber": "13800000000"
}
  1. 修正代码拼写隐患:Service层中持久层对象变量名cutomerRepository存在拼写错误(正确拼写为customerRepository),避免后续因变量名不匹配出现Bean注入失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:51:18