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"})
帮我找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"})