簡體   English   中英

Spring 開機 Rest Controller:歸還收藏<!--? extends SomeClass-->

[英]Spring Boot Rest Controller: Return Collection<? extends SomeClass>

我在名為 Annotation 的應用程序中有一個抽象 class,它僅包含一個表示 Annotation 類型的枚舉字段。 我有兩個類,LinkAnnotation 和 TextAnnotation,它們擴展了 Annotation。 兩者都是簡單的類,帶有一些 String 字段,代表某些文本中每種類型的注釋略有不同的需求。

我有一個名為 AnnotatedString 的 class,它具有以下結構:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AnnotatedString {
    private String rawContent;
    private Boolean hasAnnotations;
    private Set<?> annotations = new HashSet<>();
}

我試圖將注釋字段配置如下:

private Set<Annotation> annotations = new HashSet<>();
private Set<? extends Annotation> annotations = new HashSet<>();
private Set<?> annotations = new HashSet<>();

但是在每種情況下,當我從 RestController GetMapping 方法返回包含 AnnotatedString 的 object 時,我只看到 JSON 中抽象注釋 class 的類型字段,而沒有看到子類的任何字段。 我希望在我的 JSON 中看到的是一個 JSON 對象的數組,其字段對應於 Set 實際包含的 Java 類型。 使用 Spring Boot 是否可行,如果可以,我將如何設置 go?

正如Brendon Dugan在他的評論中指出的那樣,在父 class 上添加JsonTypeInfo注釋, use屬性等於JsonTypeInfo.Id.MINIMAL_CLASS確保具有最小路徑的 Java class 名稱將用作父 class 的子類的類型標識符. 因此,正確的子類類型將添加到Set集合中包含的所有對象,從而解決了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM