2017-10-16 290 views
0

工作,我希望能夠調用我的API與帖子內容傑克遜功能ACCEPT_SINGLE_VALUE_AS_ARRAY不會與註釋

{ 
    "property1" : "value1", 
    "property2" : "value2" 
} 

OR

[{ 
    "property1" : "value1", 
    "property2" : "value2" 
}] 

爲此,我註釋的Java類與

@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) 

public class MyClass { 



    private String porperty1; 
    private String property2; 

    public MyClass() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 


    public MyClass(String porperty1, String property2) { 
     super(); 
     this.porperty1 = porperty1; 
     this.property2 = property2; 
    } 


    public String getPorperty1() { 
     return porperty1; 
    } 


    public void setPorperty1(String porperty1) { 
     this.porperty1 = porperty1; 
    } 


    public String getProperty2() { 
     return property2; 
    } 


    public void setProperty2(String property2) { 
     this.property2 = property2; 
    } 

} 

servlet內部我有這樣的api

Response myAPI(Collection<MyClass> reqs, @Context HttpServletResponse httpResponse, @Context SecurityContext securityContext) { 

} 

但我不斷收到第一個請求類型的內部服務器錯誤500。

我試着將jackson = annotations版本從2.6.0更新到2.7.0,但它似乎並沒有在任何工作。

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>2.7.0</version> 
</dependency> 

注意:我在我的POM中還有其他傑克遜依賴項,例如, jackson-databind和jackson-core,它們仍然指向2.6.4(而jackson-dataformat-xml指向2.6.3)。我無法更新這些版本。考慮到我正在嘗試更高版本的jackson-annotations,會有什麼問題嗎?

+0

jackson-databind包含註釋配置的實現。更新jackson-annotations artifact本身並不會對你有所幫助。這種配置可能沒有實現在類型級別工作;如果我有時間,我將不得不查看代碼。 –

+0

好的,即使在將「jackson-databind」更新爲2.7之後,我仍然看到相同的錯誤。對於req#2,一切正常,但請求#1,我得到HTTP 500錯誤。 – Tintin

+0

你有沒有試過更新到最新版本的傑克遜?那將是2.9.2。如果問題在該版本中仍然存在,那麼我將不得不假定此配置尚未實現在Type級別工作。爲什麼不在Github上爲jackson-databind進行回購問題? –

回答

0

您將需要在實際屬性上使用該註釋,而不是包含屬性的POJO。

+0

但是如果我需要將整個對象作爲集合(或作爲單個值)呢?我是否創建了一個新類,並讓MyClass成爲該類的一個屬性,然後對它進行註釋? ps:我也嘗試過這種方法,即將MyClass包裝到另一個類中並註釋該屬性。但即使這樣做也不能解決問題!不知何故,我認爲我對這些Jackson API的版本是錯誤的。我認爲即使2.7也不會支持它。 – Tintin

+0

我不知道我理解你的問題。如果您的意思是「根值」(位於對象圖頂部的值,您試圖反序列化),則此功能根本無法使用。它只適用於屬性。 – StaxMan