Java Spring boot中的多级子菜单JSON
我在表中有一些记录有亲子关系,屏幕截图如下: 如何编写JPA实体来检索有关父子关系的记录。谢谢你的帮助 对我没有帮助的代码如下:Java Spring boot中的多级子菜单JSON,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我在表中有一些记录有亲子关系,屏幕截图如下: 如何编写JPA实体来检索有关父子关系的记录。谢谢你的帮助 对我没有帮助的代码如下: @Entity @Table(name = PlatformConstant.TABLE_MENU) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Menu implements Serializable { private static final lo
@Entity
@Table(name = PlatformConstant.TABLE_MENU)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "url", nullable = false)
private String url;
@Column(name = "description")
private String description;
@Column(name = "qr_code")
private Blob qrCode;
@JsonManagedReference
@OneToMany(mappedBy = "parent")
private Set<Menu> children;
@ManyToOne
@JsonBackReference
private Menu parent;
}
@实体
@表格(名称=平台常数。表格菜单)
@缓存(用法=缓存并发策略。非严格读写)
公共类菜单实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@NotNull
@列(name=“url”,nullable=false)
私有字符串url;
@列(name=“description”)
私有字符串描述;
@列(name=“qr\U代码”)
私有Blob码;
@JsonManagedReference
@OneToMany(mappedBy=“家长”)
私人儿童;
@许多酮
@JsonBackReference
私有菜单父菜单;
}
我上面的代码有以下错误输出:
使用JpaRepository find all并应用@lucid的答案,新的输出如下:
@Entity
@Table(name = PlatformConstant.TABLE_MENU)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "url", nullable = false)
private String url;
@Column(name = "description")
private String description;
@Column(name = "qr_code")
private Blob qrCode;
@JsonManagedReference
@OneToMany(mappedBy = "parent")
private Set<Menu> children;
@ManyToOne
@JsonBackReference
private Menu parent;
}
守则:
@Autowired
private MenuService menuService;
@CrossOrigin
@GetMapping("/all")
@ResponseBody
public List<Menu> getMenus() {
return (List<Menu>) menuService.findAll().stream()
.filter (menu-> Objects.isNull(menu.getParent()).collect(Collectors.toList()));
}
@Autowired
私有MenuService MenuService;
@交叉起源
@GetMapping(“/all”)
@应答器
公共列表getMenus(){
return(List)menuService.findAll().stream()
.filter(menu->Objects.isNull(menu.getParent()).collect(collector.toList());
}
输出:
谢谢。Jackson提供了这些注释来控制父子关系 @JsonBackReference:在序列化过程中跳过属性 @JsonManagedReference:正向引用和序列化的带注释属性 在您的情况下,您不希望在子引用中序列化父对象,您可以使用
@JsonBackReference
@JsonManagedReference
@OneToMany(mappedBy = "parent")
private Set<Menu> children;
@ManyToOne
@JsonBackReference
private Menu parent;
Jackson
提供这些注释来控制父子关系
@JsonBackReference:在序列化过程中跳过属性
@JsonManagedReference:正向引用和序列化的带注释属性
在您的情况下,您不希望在子引用中序列化父对象,您可以使用@JsonBackReference
@JsonManagedReference
@OneToMany(mappedBy = "parent")
private Set<Menu> children;
@ManyToOne
@JsonBackReference
private Menu parent;
它可以工作,但结果中有一个小问题[{“id”:7,“url”:“description”:“main menu 1”,“qrCode”:null,“children”:[{“id”:9,“url”:“url…”“url…”,“children menu 2”,“qrCode”:null,“children”:[]},{“id”:8,“url”:“url…”,“description”:“children menu 1”,“qrCode”:null,“children”:[]},{“id”:8,“url”:“url…”,“描述”:“子菜单1”,“qrCode”:null,“子菜单”:[]},{“id”:9,“url”:“url…”,“描述”:“子菜单2”,“qrCode”:null,“子菜单”:[]}]id=7及其两个子项检索正常。但问题是子项也显式进入结果。无法使用StringUtils.isBlank方法。它将从何处导入?
Objects.isNull(menu.getParent()).collect(Collectors.toList());
出现错误:无法调用collect(Collectors.toList())在基本类型booleanit上可以工作,但结果[{“id”:7,“url”:“,”description:“main menu 1”,“qrCode”:null,“children:”:[{“id”:9,“url:”,“url:”,“description:”:“child menu 2”,“qrCode”:null,“children:[]},{“id”:8,“url:“url:”url…,“description:“child menu 1”,“qrCode”:null,“children:”[]},{“id”:8,“url”:“url…”,“描述”:“子菜单1”,“qrCode”:null,“子菜单”:[]},{“id”:9,“url”:“url…”,“描述”:“子菜单2”,“qrCode”:null,“子菜单”:[]}]id=7及其两个子项检索正常。但问题是子项也显式进入结果。无法使用StringUtils.isBlank方法。它将从何处导入?Objects.isNull(menu.getParent()).collect(Collectors.toList());
出现错误:无法调用collect(Collectors.toList())关于本原型布尔