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

Spring Boot项目返回JSON时缺失Book实体id字段的问题排查

Spring Boot中Book实体id字段未出现在JSON响应中的问题解决

问题原因分析

你遇到的问题核心有两个:

  1. Lombok未正确生成id字段的getter方法:Jackson序列化依赖字段的getter方法,若未生成则无法将id序列到JSON中。
  2. Spring Data Rest默认隐藏实体id字段:使用Rest Repositories时,Spring Data Rest出于设计默认会隐藏实体的id字段,即使字段有getter也不会返回。

具体解决步骤

1. 确保Lombok正确生成getter方法

如果项目依赖Lombok,给Book实体添加Lombok注解自动生成getter/setter:
修改后的Book实体代码:

package com.bonglib.springbootlibrary.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Column;
import lombok.Data;

@Entity
@Data
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "title")
    private String title;

    @Column(name = "author")
    private String author;
}

@Data注解会自动生成所有字段的getter、setter、构造器等方法,确保Jackson能访问到id字段。

2. 配置Spring Data Rest暴露id字段

由于使用了Rest Repositories,需显式配置让Spring Data Rest返回id字段,有两种方式:

方式一:在id字段上添加注解

直接在id字段上添加@RestResource(exported = true)和@JsonProperty注解:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@JsonProperty("id")
@RestResource(exported = true)
private Long id;

@RestResource(exported = true)强制Spring Data Rest暴露该字段,@JsonProperty确保Jackson使用"id"作为JSON键名。

方式二:全局配置暴露指定实体的id

在application.properties中添加配置:

spring.data.rest.expose-id-for=com.bonglib.springbootlibrary.entity.Book

如果使用application.yml则配置:

spring:
  data:
    rest:
      expose-id-for: com.bonglib.springbootlibrary.entity.Book

该配置会全局设置暴露Book实体的id字段,无需修改实体代码。

验证

完成配置后重启项目,再次请求图书数据,JSON响应中会包含id字段:

{
  "id": 1,
  "title": "Sample Book",
  "author": "John Doe"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:13:33