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

使用JSON Include只显示Id,而不包括所有

@JsonIncludeProperties(value = {"id"})

我不会在这里留下空格@GeneratedValue(strategy=GenerationType.IDENTITY(-->@GeneratedValue(strateg=GenerationType.EdentiTY(。你确实需要一个控制器和一个用@Restcontroller和@service注释的服务,然后你可以设置一个@Repository,它只是"findByID"(Repository实际上理解这一点,而不需要任何进一步的实现(。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和你尝试的差不多。

最新更新