Spring 仅启动 @ManyToOne Id @JsonProperty

Spring Boot @ManyToOne only Id @JsonProperty

帮我找JSON属性注解谁给我选实体属性到JSON序列化。我只需要一个。

我这样编码:

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

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

   @JsonIgnoreProperties(value = {"name", "description", "pages"}) // it's working, but I want to simplify, I need only project id property to JSON
   @ManyToOne(fetch = FetchType.EAGER)
   @JoinColumn(name = "project_id")
   private Project project;

   //getters and setters
} 

和项目实体:

@Entity
@Table(name = "projects")
public class Project {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "project_id")
    private Long id;

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

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


    @OneToMany(targetEntity = Page.class, mappedBy = "project", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @OrderBy("id")
    private List<Page> pages = new ArrayList<>();
}

而JSON应该是:

   {
        "id": 10,
        "name": "Name",
        "project": {"id":1}
   }

与其使用太多注释,不如创建一个 DataTransferObject (DTO)。

在 DTO 中,您可以准确定义应公开哪些信息并将每个实体对象映射到 DTO。这将返回到前端,而不是实体本身。

这里有一个很好的主题教程:https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application

我不会在这里留空格@GeneratedValue(strategy = GenerationType.IDENTITY) --> @GeneratedValue(策略=GenerationType.IDENTITY)。您确实需要一个控制器和一个用 @Restcontroller 和 @Service 注释的服务,然后您可以设置一个 @Repository 并且只是 "findByID" (存储库实际上理解这一点而无需任何进一步的实现)。 ID 可以绑定到 @Pathvariable 并从 URL /Project/{id} 检索值 你可能会做这样的事情,例如

@RequestMapping(method=RequestMethod.POST, path="project/{id}")
void addUser(@Pathvariable Long id) {
    ProjectService.delete(id);
}

试试这个 https://www.youtube.com/watch?v=QHjFVajYYHM 几乎与您正在尝试的一样。

使用 JSON 包含仅显示 ID,而不是排除所有内容

@JsonIncludeProperties(value = {"id"})