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

Spring Boot POST接口返回空值及@RequestBody后Customer字段为空问题

问题1:初始提交字段全为null、预设数值返回0.0

产生原因

Controller层的CreateInvestment方法接收参数未添加@RequestBody注解,Spring MVC默认将参数按表单格式解析,你通过Postman提交的是JSON格式请求体,无法映射到Investment实体类的对应字段。仅Service层手动设置的accountNumber、status字段有值,其余字段为实体类初始化的默认值:引用类型为null,基础类型int默认值为0、float默认值为0.0。

解决方案

给Controller方法的Investment参数前添加@RequestBody注解,让Spring通过Jackson将JSON请求体反序列化到实体对象,即可正常填充提交的字段。


问题2:添加@RequestBody后关联Customer对象仅id有值、其余字段为null

产生原因

  • 请求体字段名和实体类字段名不匹配:Investment实体类中关联Customer的属性名为customer_id,但请求体中传的字段为customer,反序列化时只会将请求体中customer的id填充到临时生成的Customer对象中,其余未传字段自然为null。
  • 未主动查询完整Customer数据:当前Service逻辑仅直接保存前端传过来的Investment对象,没有根据传入的customer id查询数据库中完整的Customer实体,保存时只会将customer id存入外键字段,返回的关联Customer对象还是前端传入的仅有id的空对象。同时你配置了fetch = FetchType.LAZY懒加载策略,保存后直接返回时Hibernate不会主动查询Customer的其余字段。
  • 常量初始化逻辑错误:你定义的wht = 10/100、preLiquidationCharges = 25/100为整数除法,默认会得到0值,后续返回出现0.1、0.25是修复为浮点数除法后的结果。

解决方案

  1. 统一字段名:要么将Investment实体类的customer_id属性改名为customer(符合常规命名规范),要么将请求体中的customer字段改为customer_id,保证JSON字段和实体属性名匹配。
  2. Service层补充查询逻辑:先根据传入的Customer id查询完整的Customer实体,再关联到Investment对象后保存,代码示例:
// 先注入CustomerRepository
@Autowired
private CustomerRepository customerRepository;

public Investment CreateInvestment(Investment investment) {
    investment.setAccountNumber(nextAccountNumber());
    investment.setStatus(InvestmentStatus.pending);
    // 查询完整客户信息
    if (investment.getCustomer_id() != null && investment.getCustomer_id().getId() != null) {
        Customer customer = customerRepository.findById(investment.getCustomer_id().getId())
                .orElseThrow(() -> new RuntimeException("对应客户不存在"));
        investment.setCustomer_id(customer);
    }
    return investmentRepository.save(investment);
}
  1. 按需调整加载策略:如果该接口每次返回都需要完整Customer信息,可将关联配置的fetch = FetchType.LAZY改为fetch = FetchType.EAGER,保存后Hibernate会自动加载关联的Customer全字段。
  2. 修正常量初始化:将常量赋值改为浮点数除法wht = 10f/100、preLiquidationCharges = 25f/100,避免整数除法得到0值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:54:07