Java后台如何返回实现前端树形结构数据:
1.步(必须这样写):
package com. zhecre. jx. business. common ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import java. util. List ;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseTreeNode < T > {
private String indexid;
private String indexname;
private String parentid;
private List < T > children;
}
2步:
package com. zhecre. jx. business. model. cases. response ;
import com. zhecre. jx. business. common. BaseTreeNode ;
import lombok. Data ;
import java. util. List ;
@Data
public class AreaInfo extends BaseTreeNode < AreaInfo > {
private String indexid;
private String indexname;
private String unit;
private Double coef;
private String parentid;
private List < AreaInfo > children;
}
3.controller
@GetMapping ( "/compensationtree" )
public List < AreaInfo > areaInfoList ( ) {
List < AreaInfo > areaInfu = pasCaseService. selectAll ( ) ;
List < AreaInfo > tree = TreeUtil . getTree ( areaInfu) ;
return tree;
}
4.Service
public List < AreaInfo > selectAll ( ) ;
5.serviceimpl
@Override
public List < AreaInfo > selectAll ( ) {
return pasCaseMapper. selectAll ( ) ;
}
6.Mapper
List < AreaInfo > selectAll ( ) ;
7.MapperXML
< select id = " selectAll" resultType = " com.zhecre.jx.business.model.cases.response.AreaInfo" >
SELECT INDEXID,INDEXNAME,PARENTID,UNIT,COEF FROM PAS_INDEX WHERE INDEXID LIKE 'IA%'
</ select>
8.工具类:
package com. zhecre. jx. business. common ;
import cn. hutool. core. collection. CollectionUtil ;
import lombok. extern. slf4j. Slf4j ;
import org. springframework. util. CollectionUtils ;
import java. util. * ;
import java. util. stream. Collectors ;
@Slf4j
public class TreeUtil {
public static < T extends BaseTreeNode > List < T > getTree ( List < T > listNodes) {
if ( CollectionUtil . isNotEmpty ( listNodes) ) {
Map < String , List < T > > listMap = listNodes. stream ( ) . collect ( Collectors . groupingBy ( t -> Optional . ofNullable ( t. getParentid ( ) ) . orElse ( String . valueOf ( "root" ) ) ) ) ;
List < T > oneLevelClassify = listMap. get ( "root" ) ;
List < T > list = getChildList ( oneLevelClassify, listMap) ;
return list;
}
return new ArrayList < > ( ) ;
}
private static < T extends BaseTreeNode > List < T > getChildList ( List < T > classifies, Map < String , List < T > > groupMap) {
if ( CollectionUtil . isNotEmpty ( classifies) ) {
for ( T tree: classifies) {
List < T > classifyList = groupMap. get ( tree. getIndexid ( ) ) ;
if ( ! CollectionUtils . isEmpty ( classifyList) ) {
tree. setChildren ( ( List < BaseTreeNode > ) classifyList) ;
getChildList ( classifyList, groupMap) ;
} else {
tree. setChildren ( null ) ;
}
}
return classifies;
}
return new ArrayList < > ( ) ;
}
}