java通过父节点来查询树形结构并返回json

分类列表

在这里插入图片描述
列表实体类:

@EqualsAndHashCode(callSuper = true)
@Data
@TableName("cms_category")
public class Category extends Model<Category> {

    /**
     *  类别表栏目ID
     */

    @ApiModelProperty(value = "类别表栏目ID")
    @TableId(value = "`id`",type = IdType.AUTO)
    private long id;

    /**
     * 父级栏目ID
     */
    @ApiModelProperty(value = "父级栏目ID")
    @TableField(value = "`pid`")
    private String pId;

    /**
     * 栏目名称
     */
    @ApiModelProperty(value = "栏目名称")
    @TableField(value = "`name`")
    private String name;


    /**
     * 是否启用(0 否 1 是)
     */
    @ApiModelProperty(value = "是否启用(0 否 1 是)")
    @TableField(value = "`is_enable`")
    private String isEnable;

    /**
     * 排序
     */
    @ApiModelProperty(value = "排序")
    @TableField(value = "`sort`")
    private String sort;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @TableField(value = "`create_time`")
    private String createTime;

    /**
     * 子节点
     */
    @ApiModelProperty(value = "子节点")
    @TableField(exist = false)
    private List<Category> children;

}

controller层:

@RestController
@RequestMapping("/web/category")
@Api(tags = {"后台接口-文章分类相关接口"})
public class CategoryController {

    @Autowired
    CategoryService categoryService;

    @PostMapping(value = "getTree")
    @ApiOperation("查询树形结构")
    public CommonResult getTreeByPid() {
        List<Category> category= categoryService.getTree(0L);
        return CommonResult.success(category);

    }
}

service接口

public interface CategoryService extends IService<Category> {

    /**
     * 通过id来查找类别
     * @param id
     * @return
     */
    Category findByCategoryId(Long id);

    /**
     * 通过pId查询列表结构
     */
    List<Category> getTree(Long pId);
}

service实现类

@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
    @Autowired
    CategoryMapper categoryMapper;

    @Override
    public Category findByCategoryId(Long id) {
        return categoryMapper.findByCategoryId(id);

    }

    @Override
    public List<Category> getTree(Long pId){
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.eq("pid", pId);
        List<Category> list = categoryMapper.selectList(wrapper);
        for (Category category : list) {
            List<Category> children = getTree(category.getId());
            if (CollUtil.isEmpty(children)) {
                continue;
            }
            category.setChildren(children);
        }
        return list;
    }

}

主要是通过构造器查询查询一个列表,然后循环,递归的查找子节点,最终返回树形结构

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,如果要拼接树形结构JSON字符串,可以使用递归的方式来实现。假设我们有一个树形结构的数据,每个节点包含一个值和子节点列表。 首先,我们创建一个递归方法,该方法接受一个节点作为参数,并返回一个字符串表示该节点及其子节点的JSON字符串。在方法中,我们首先创建一个StringBuilder对象用于拼接最终的结果。 然后,我们将当前节点的值转换为JSON格式的字符串,并将其添加到StringBuilder对象中。接下来,我们检查当前节点是否有子节点,如果有,则递归调用该方法处理每个子节点,并将结果添加到StringBuilder对象中。 最后,我们在方法的结尾处返回StringBuilder对象的字符串表示形式。 以下是一个示例代码: ``` import com.google.gson.Gson; public class JsonTreeBuilder { public static void main(String[] args) { // 创建树形结构数据 // 构造节点 Node node3 = new Node("Node 3"); Node node4 = new Node("Node 4"); Node node2 = new Node("Node 2", node3, node4); Node node1 = new Node("Node 1", node2); // 将树形结构转换为JSON字符串 String jsonString = buildJsonString(node1); System.out.println(jsonString); } public static String buildJsonString(Node node) { StringBuilder sb = new StringBuilder(); // 添加节点值 sb.append("{ \"value\": \"" + node.getValue() + "\", "); // 添加子节点列表 sb.append("\"children\": ["); for (int i = 0; i < node.getChildren().size(); i++) { sb.append(buildJsonString(node.getChildren().get(i))); if (i < node.getChildren().size() - 1) { sb.append(", "); } } sb.append("] }"); return sb.toString(); } } class Node { private String value; private List<Node> children; public Node(String value, Node... children) { this.value = value; this.children = Arrays.asList(children); } public String getValue() { return value; } public List<Node> getChildren() { return children; } } ``` 上述代码使用了一个Node类来表示树形结构的节点,每个节点包含一个value属性和一个children属性,用于存储子节点列表。在示例代码的main方法中,我们创建了一个树形结构的数据,并将其转换为JSON字符串。 在buildJsonString方法中,我们使用StringBuilder对象拼接JSON字符串。首先,我们添加节点的值,并添加一个children属性,然后遍历所有的子节点,并递归调用buildJsonString方法来处理每个子节点。最后,将结果转换为字符串形式并返回

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值