ich denke, dass Sie DFS-Algorithmus und diese Implementierung Beispiele benötigen .... (https://www.cis.upenn.edu/~matuszek/cit594-2003/Examples/TreeTraversals/TreeTraversals.java)
Aber Sie können diese Methode aller Kategorie passieren und Baum dieser Kategorie erhalten. Und zusätzlich möchte ich erwähnen, dass Sie CategoryDTO und relativ CategoryMapper darstellen bessere Art auf Antwort (auf Darstellungsebene zB - geruhsamen) verwenden können
// zur besseren Lesbarkeit Einrichter, Getter und andere Felder (und Code-Teile) weggelassen werden, ist
public class Category implements Serializable, Comparable<Category> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "created_on")
private Instant createdOn;
@Column(name = "created_by")
private String createdBy;
@Column(name = "status")
private Integer status;
@Column(name = "name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private Category parent;
@Transient
private List<Category> child = new ArrayList<>();
}
diese Methode, die
private List<Category> createTreeCategoriesByParent(final List<Category> categories, Long parentId) {
List<Category> siblings;
siblings = new ArrayList<>();
categories.forEach(category -> {
if (Objects.equals(category.getParent() == null ? null : category.getParent().getId(), parentId)) {
List<Category> children = createTreeCategoriesByParent(categories, category.getId());
children.sort(Category::compareTo);
category.setChild(children);
siblings.add(category);
}
});
return siblings;
}
Liste der Kategorie Baum zurück
Ihre Eingabe Kategorie wird
[
{
"status": 1,
"name": "Woman",
"accOrder": 0,
"parentId": null,
"child": []
},
{
"status": 1,
"name": "Man",
"accOrder": 0,
"parentId": null,
"child": []
},
{
"status": 1,
"name": "Shoes",
"accOrder": 0,
"parentId": 1,
"child": []
},
{
"status": 1,
"name": "Bijoux",
"accOrder": 1,
"parentId": 1,
"child": []
},
{
"status": 1,
"name": "Sneckers",
"accOrder": 1,
"parentId": 3,
"child": []
},
{
"status": 0,
"name": "Kids",
"accOrder": 1,
"parentId": null,
"child": []
},
{
"status": 1,
"name": "Good Sneckers",
"accOrder": 1,
"parentId": 5,
"child": []
},
{
"status": 1,
"name": "Bad Snackers",
"accOrder": 2,
"parentId": 5,
"child": []
}]
Ausgang ist
[
{
"status": null,
"name": "Woman",
"accOrder": 0,
"parentId": null,
"child": [
{
"status": null,
"name": "Shoes",
"accOrder": 0,
"parentId": 1,
"child": [
{
"status": null,
"name": "Sneckers",
"accOrder": 1,
"parentId": 3,
"child": [
{
"createdBy": null,
"status": null,
"name": "Good Sneckers",
"accOrder": 1,
"parentId": 5,
"child": []
},
{
"status": null,
"name": "Bad Snackers",
"accOrder": 2,
"parentId": 5,
"child": []
}
]
}
]
},
{
"status": null,
"name": "Bijoux",
"accOrder": 1,
"parentId": 1,
"child": []
}
]
},
{
"status": null,
"name": "Man",
"accOrder": 0,
"parentId": null,
"child": [
{
"status": null,
"name": "T-shirt",
"accOrder": 1,
"parentId": 2,
"child": []
}
]
},
{
"status": null,
"name": "Kids",
"accOrder": 1,
"parentId": null,
"child": []
},
{
"status": null,
"name": "Furniture",
"accOrder": 4,
"parentId": null,
"child": []
}
]
Erste und formost, REST kaum etwas mit URI-Design zu tun hat; RESTs Absicht ist die Entkopplung von API/Server und ihren Clients. HTTP bietet Content-Type-Negotiation, mit der ein Client dem Server mitteilen kann, wie die Antwort aussehen soll. Sie könnten also einen Medientyp definieren, der nur die obersten Kategorien enthält (dh 'application/vnd.yourComp.category.top + json') und einen, der die vollständige Hierarchie enthält (dh' application/vnd.yourComp.category.full + xml') und lassen Sie dann den Kunden entscheiden, was er sehen möchte. –
Ich denke, dass Sie DFS-Algorithmus und diese Implementierungsbeispiele benötigen. https://www.cis.upenn.edu/~matuszek/cit594-2003/Examples/TreeTraversals/TreeTraversals.java – Musa