2014-03-04 65 views
18

我收到以下錯誤,但沒有找到解決方法,我發現對我有用: 無法識別的字段「GaugeDeviceId」(Class GaugeDevice)因爲可以忽略Jackson Json反序列化:無法識別的字段「...」,未標記爲可忽略的

問題似乎是,該服務返回具有前導大寫字母的屬性名稱,而類屬性以較低的字母開頭。

我嘗試:

  1. 改變propertyNames到第一上字母 - 相同的錯誤
  2. 加入@JsonProperty( 「的SerialNo」)添加到屬性的實例 - 相同的錯誤
  3. 加入@JsonProperty(「的SerialNo 「)到相應的獲取器 - 相同的錯誤
  4. 將@JsonProperty(」SerialNo「)添加到相應的setters - 相同的錯誤
  5. 將@JsonProperty(」SerialNo「)添加到所有這些(僅用於fu N) - 同樣的錯誤

(注:@JsonProperty( 「的SerialNo」)只是一個例子)

奇怪的是,該註釋:@JsonIgnoreProperties(ignoreUnknown =真)應該禁止正是錯誤,但它仍然是觸發...

這裏的類:(注:未完成)

@JsonIgnoreProperties(ignoreUnknown = true) 
public class GaugeDevice 
{ 
    private int gaugeDeviceId; 
    private Date utcInstallation; 
    private String manufacturer; 
    private float valueOffset; 
    private String serialNo; 
    private String comment; 
    private int digitCount; 
    private int decimalPlaces; 

    @JsonProperty("SerialNo") 
    public String getSerialNo() { 
     return serialNo; 
    } 

    public void setSerialNo(String serialNo) { 
     this.serialNo = serialNo; 
    } 

    @JsonProperty("Comment") 
    public String getComment() { 
     return comment; 
    } 

    public void setComment(String comment) { 
     this.comment = comment; 
    } 

哪裏就出在這裏的呢?請幫忙。

編輯:

下面是客戶端類:(只是一個簡單的測試客戶端)

import ccc.android.meterdata.*; 

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.Invocation; 
import org.glassfish.jersey.jackson.JacksonFeature; 

public class RestClient 
{ 
    private String connectionUrl; 
    private javax.ws.rs.client.Client client; 

    public RestClient(String baseUrl) { 
     client = ClientBuilder.newClient();; 
     connectionUrl = baseUrl; 
     client.register(JacksonFeature.class); 
    } 

    public GaugeDevice GetGaugeDevice(int id){ 

     String uri = connectionUrl + "/GetGaugeDevice/" + id; 
     Invocation.Builder bldr = client.target(uri).request("application/json"); 
     return bldr.get(GaugeDevice.class); 
    } 
} 

我希望在這裏的錯誤有它的根源在哪裏?

回答

6

給出下面是你的錯誤:

Unrecognized field "GaugeDeviceId" (Class GaugeDevice), not marked as ignorable

我敢肯定,你需要做同樣的事情爲GaugeDeviceId財產您爲SerialNo屬性來完成。

@JsonProperty("SerialNo") 
public String getSerialNo() { 
    return this.serialNo; 
} 

@JsonProperty("GaugeDeviceId") 
public int getGaugeDeviceId() { 
    return this.gaugeDeviceId; 
} 

在這裏,我有一個快速的測試類,不扔錯誤。

import org.codehaus.jackson.map.ObjectMapper; 

public class JsonDeserialization { 
    public static void main(final String[] args) { 
     final String json = "{ \"SerialNo\":\"123\", \"GaugeDeviceId\":\"456\"}"; 

     final ObjectMapper mapper = new ObjectMapper(); 

     try { 
      final GaugeDevice readValue = mapper.readValue(json, GaugeDevice.class); 
      System.out.println(readValue.getSerialNo()); 
      System.out.println(readValue.getGaugeDeviceId()); 
     } catch (final Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

,並將其輸出:

123 
456 

編輯:版本信息

這不是問題,因爲我相信上面是全部採用了一些非常標準的東西從傑克遜,我m使用版本1.9。13核心ASL映射-ASL的


編輯:客戶提供的

我不知道這是有關this issue?我相信該解決方案是您正在使用的依賴關係的配置。

我不知道,但我覺得我親近以下依賴安裝(注意:我使用maven)

<dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-processing</artifactId> 
     <version>2.0</version> 
    </dependency> 

這些鏈接提供的配置信息:Link 1Link 2

+0

是的,具有。我的代碼只是一個出場。 我已經試過,沒有成功。 – chile

+0

@chile你可能會添加反序列化對象的代碼嗎?如果你的'GaugeDevice'有正確的註解,那麼它應該工作,如果ObjectMapper'不包含任何自定義(de)序列化器。 –

+0

客戶端類添加...也許我使用不推薦使用的東西? – chile

15

我有同樣的問題,我從改變註釋進口解決它:

com.fasterxml.jackson.annotation.JsonIgnoreProperties 

org.codehaus.jackson.annotate.JsonIgnoreProperties 

沒有定義任何NamingStrategy或ObjectMapper。

+0

謝謝,我也有同樣的錯誤,INTELIJ IDE沒有詢問選擇, 自動設置錯誤。 – user3871754

5

通過在類級別使用註釋來反序列化時,可以忽略未知屬性。

例如:

@JsonIgnoreProperties(ignoreUnknown=true) 
class Foo{ 
... 
} 

上面代碼段將忽略任何未知的屬性。 (譯註進口:org.codehaus.jackson.annotate.JsonIgnoreProperties)

8

我有同樣的問題,並解決它由

com.fasterxml.jackson.annotation.JsonProperty 

改變註釋進口

org.codehaus.jackson.annotate.JsonProperty 
+0

這一個修正了我的錯誤! – bmarkham

相關問題