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

Spring Boot中Post请求经Hibernate写入MySQL后返回Null问题求助

问题排查:Spring Boot API返回Null且数据未插入MySQL

问题描述

程序开发完成后,使用Postman测试API时出现以下异常:

  • Controller返回的数据仅自增id有值,其余字段持续为Null
  • 无任何代码报错,但Hibernate始终返回Null结果
  • Post请求提交的数据并未插入MySQL数据库

相关代码及Postman响应如下:

实体类代码

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
@Table(name = "student_lib")
public class StudentLibrary {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    
    private Long id;
    private String name;
    private String addressess;
    private String email;
    
    
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddressess() {
        return addressess;
    }
    public void setAddressess(String addressess) {
        this.addressess = addressess;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    
    public StudentLibrary(Long id, String name, String addressess, String email) {
        super();
        this.id = id;
        this.name = name;
        this.addressess = addressess;
        this.email = email;
    }
}

Service层代码

@Service
public class LibService {
    
    @Autowired
    private LibRepository repository;
    
    public StudentLibrary getLibraryById(Long id) {
        return repository.findById(id).get();
    }
    
    public StudentLibrary insertLibrary(StudentLibrary studentLibrary) {
        return repository.save(studentLibrary);
    }
}

Controller层代码

@RestController
@RequestMapping("/Api")
public class LibController {
    @Autowired 
    LibService service;
    
    @GetMapping("/Lib")
    public StudentLibrary getAllDataById(Long id) {
        return service.getLibraryById(id);
    }
    
    @PostMapping("/save")
    public StudentLibrary insertData(StudentLibrary studentLibrary) {
        return service.insertLibrary(studentLibrary);
    }
}

Postman响应结果

{
    "id": 12,
    "name": null,
    "addressess": null,
    "email": null
}

问题原因及解决方法

1. Post请求参数绑定失败

  • 原因:Controller的insertData方法直接接收StudentLibrary对象,但未添加@RequestBody注解,Spring无法将请求体的JSON数据绑定到实体类对象上,导致除自增id外,其他字段均为Null。
  • 解决:在方法参数上添加@RequestBody注解:
    @PostMapping("/save")
    public StudentLibrary insertData(@RequestBody StudentLibrary studentLibrary) {
        return service.insertLibrary(studentLibrary);
    }
    
  • 补充:Postman请求时需设置请求头Content-Type: application/json,且请求体为合法JSON格式。

2. 实体类注解与手动代码冲突

  • 原因:实体类同时使用Lombok的@Data注解(自动生成getter/setter、构造方法等)和手动编写的getter/setter、构造方法,二者冲突导致属性赋值、读取异常。
  • 解决:删除所有手动编写的getter/setter和构造方法,保留Lombok注解即可,Lombok会自动生成正确的方法:
    @Entity
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    @Table(name = "student_lib")
    public class StudentLibrary {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
        private String addressess;
        private String email;
    }
    

3. Get请求参数未明确绑定

  • 原因:getAllDataById方法的Long id参数未添加@RequestParam注解,Spring无法正确识别URL中的参数,可能导致查询时id值不正确,返回Null。
  • 解决:添加@RequestParam注解明确参数来源:
    @GetMapping("/Lib")
    public StudentLibrary getAllDataById(@RequestParam Long id) {
        return service.getLibraryById(id);
    }
    

4. Repository未正确继承JpaRepository

  • 原因:如果LibRepository未继承JpaRepository<StudentLibrary, Long>,findById和save方法无法正常与数据库交互,导致数据操作失败。
  • 解决:确保Repository接口正确继承:
    public interface LibRepository extends JpaRepository<StudentLibrary, Long> {
    }
    

5. 事务未正确执行(可选排查)

  • 原因:虽然Spring Boot默认会为@Service类方法开启事务,但特殊配置下可能失效,导致save操作未提交到数据库。
  • 解决:在LibService的insertLibrary方法上添加@Transactional注解:
    @Transactional
    public StudentLibrary insertLibrary(StudentLibrary studentLibrary) {
        return repository.save(studentLibrary);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:17:02