簡體   English   中英

澤西·傑克遜的根名稱以ArrayList的形式出現

[英]Jersey Jackson root name coming as ArrayList

我有一個對象數組列表。 數組列表。 Employee類使用@XMLRootElement(name =“ employees”)進行注釋。 我使用球衣1.8.1,傑克遜1.9.2和POJOMappingFeature。響應就像

{
    ArrayList: [{name: John, age: 28}, {name: Mike, age:29}]
}

我如何讓傑克遜在json響應中顯示正確的根名稱(員工)。 我也嘗試在Employee類上使用@JsonName(value =“ employees”)。 我需要不使用帶有屬性List的EmployeeListWrapper之類的列表包裝器來執行此操作。 我想得到這樣的回應

{
    employees: [{name: John, age: 28}, {name: Mike, age:29}]
}

是否可以使用任何傑克遜對象映射器配置來執行此操作。 任何幫助將不勝感激。

您可能無法使用@XMLRootElement@JsonRootName批注實現此目的,因為批注必須放在ArrayList類本身上。 並且由於您需要在沒有任何集合包裝的情況下進行操作,因此您將不得不直接使用Jackson ObjectMapper

映射器提供對ObjectWriter構建器的訪問,

可以用於序列化參數(例如JSON View和要使用的根類型)的按序列化配置的Builder對象。

並且作者具有您需要的withRootName()方法。

用配置構造新實例的方法,該配置指定用於“根元素包裝”的根名稱。

請參見下面的代碼段。

ObjectWriter writer = ObjectMapper.writer().withRootName("employees");
writer.writeValueAsString(employees);

默認情況下,Jackson可能無法識別JAXB批注,但是您可以自定義對象映射器來執行此操作。

如果要堅持使用Jackson批注,則可以使用@JsonRootName指示用於根級包裝的名稱。

另一種選擇是在重寫方法findRootName() JaxbAnnotationIntrospector並使用該內部ObjectMapper。

因此代碼如下所示:

@Override
public String findRootName(AnnotatedClass ac) {
    // will return "employees" for @XmlType(name = "employees")
    // Or you can return the class name itself
    return ac.getAnnotations().get(XmlType.class).name();
}

參考: 在Jackson JSON提供程序中自定義根名稱

暫無
暫無

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

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