我確定這應該很簡單,但我似乎無法弄清楚如何做到這一點。
我們有一個與另一個物體具有 oneToMany 關系的物體。基本的父/子關系(使用 Spring/JPA)。
要求是有一個提供所有父母的 api '/parents' 和另一個提供所有父母及其相關子物體的 '/parents_with_children'。
現在要讓父母和他們的孩子在一起,我們可以指定“@OneToMany(fetch = FetchType.EAGER),這很好用。
但是,我怎樣才能告訴我的 RestController 類只回傳頂級組件而不進行級聯?
// Works fine with eager fetching
@GetMapping("/parents_with_children")
public List<Parent> list() {
return ParentService.getParents();
}
// How can I tell this one to NOT print out the children?
@GetMapping("/parents")
public List<Parent> list() {
return ParentService.getParents();
}
我應該以某種方式手動列印并從物體回傳 JSON 資料嗎?
uj5u.com熱心網友回復:
您可以使用 DTO 模式(簡單 POJO)作為物體的抽象。您可以定義這些,例如ParentDto并創建要在 JSON 中回傳的所有方法。
這個想法是從資料庫中獲取您的物體,將其映射到 DTO。在您的 /parents 沒有孩子的情況下,您根本不會設定孩子串列(將其保留為空)。
然后,您可以標記該欄位,@JsonInclude(JsonInclude.Include.NON_NULL)如果設定了該欄位,它將僅在 JSON 中顯示該欄位。
public class ParentDto {
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<Children> children;
// other private members
// getters/setters
}
有一些庫可以為您進行映射,例如,mapstruct或者ModelMapper您可以將Parent物體映射到ParentDto自己。
然后您的控制器將回傳 DTO。
public List<ParentDto> list();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432642.html
