- 一個實體類,其中有parentid,通過parentid來展現出無限層級的關係
@Data
@TableName(value = "t_sb_menu")
public class TSbMenu implements Serializable
{
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value="")
private Integer id;
@TableField(value = "menuName")
@ApiModelProperty(value="")
private String menuname;
/**
* 0:頂級菜單
其它:菜單主鍵
目前僅兩級菜單
*/
@TableField(value = "parentId")
@ApiModelProperty(value="0:頂級菜單, 其它:菜單主鍵, , 目前僅兩級菜單")
private Integer parentid;
@TableField(value = "requestUrl")
@ApiModelProperty(value = "")
private String requesturl;
@TableField(value = "imageUrl")
@ApiModelProperty(value="")
private String imageurl;
@TableField(value = "sort")
@ApiModelProperty(value = "")
private Integer sort;
@TableField(value = "status")
@ApiModelProperty(value="")
private Byte status;
private static final long serialVersionUID = 1L;
public static final String COL_ID = "id";
public static final String COL_MENUNAME = "menuName";
public static final String COL_PARENTID = "parentId";
/**
* 小寫的父節點
*/
public static final String COL_PARENTID_LOWE = "parentid";
public static final String COL_REQUESTURL = "requestUrl";
public static final String COL_IMAGEURL = "imageUrl";
public static final String COL_SORT = "sort";
public static final String COL_STATUS = "status";
}
/**
* 將指定的list轉換成爲樹結構的數據
*
* @param list 集合對象,每個對象都有用來表示上下級關係的屬性結構
* @param id 集合中用來表示id列
* @param parentid 集合對象中用來表示parentId的列
* @param childs 父子級關係表現出來時,將會在父級節點內添加本屬性數組集合,並將自己點放置到本數組集合內
* @param parentId 最頂級的id
* @return 樹結構的 JSONArray 對象
*/
public static JSONArray parseTree(List<?> list, String id, String parentid, String childs, Object parentId)
{
JSONArray obj = new JSONArray();
for (Object object : list)
{
JSONObject tmepOjb = JSONObject.parseObject(JSON.toJSONString(object));
Object menuId = tmepOjb.get(id);
Object pid = tmepOjb.get(parentid);
if (parentId.toString().equals(pid.toString()))
{
JSONArray c_node = parseTree(list, id, parentid, childs, menuId);
tmepOjb.put(childs, c_node);
obj.add(tmepOjb);
}
}
return obj;
}
// 菜單轉換成爲樹形結構
JSONArray array = CommonUtil.parseTree(menus, TSbMenu.COL_ID, TSbMenu.COL_PARENTID_LOWE, TSbMenuVo.COL_CHILDS, Constants.ZERO);
- 上面已經成功的拿到了一個JSONArray的樹形結構對象了,但我們還可以將這個屬性結構對象轉換成爲java實體類,實體類裏面有個childs,泛型爲自己,如下
@Data
public class TSbMenuVo implements Serializable
{
private Integer id;
@ApiModelProperty(value = "菜單名")
private String menuname;
/**
* 0:頂級菜單
* 其它:菜單主鍵
* <p>
* 目前僅兩級菜單
*/
@ApiModelProperty(value = "0:頂級菜單, 其它:菜單主鍵, , 目前僅兩級菜單")
private Integer parentid;
@ApiModelProperty(value = "菜單的請求地址")
private String requesturl;
@ApiModelProperty(value = "菜單image路徑")
private String imageurl;
@TableField(value = "sort")
@ApiModelProperty(value = "排序")
private Integer sort;
/**
* 菜單的子菜單
*/
private List<TSbMenuVo> childs;
@ApiModelProperty(value = "權限集合")
private List<TSbPurview> purviews;
public static final String COL_CHILDS = "childs";
- JSONArray轉換成爲java無限層級代碼,使用fastjson
List<TSbMenuVo> menuVos = JSONArray.parseArray(array.toJSONString(), TSbMenuVo.class);