2012-10-22 87 views
0

我如何告訴傑克遜忽略JSON名稱?JSON和Jackson

我有以下POJO:

class MyPojo { 
    private String ABCName; 
} 

當我有話爲:

「ABCName」: 「富」,那麼傑克遜不承認它拋出錯誤。

它期望的是:

「abcName」:「foo」。

代碼:

import org.codehaus.jackson.annotate.JsonProperty; 
import org.codehaus.jackson.map.ObjectMapper; 

    public class TestJackson { 

     public static void main(String args[]) throws Exception { 

      ObjectMapper mapper = new ObjectMapper(); 
      MyPojo my = new MyPojo(); 
      my.setABCName("Foo"); 
      System.out.println(mapper.writeValueAsString(my)); 

     } 

     private static class MyPojo { 


      private String ABCName; 
      public void setABCName(String ABCName) { 
       this.ABCName = ABCName; 
      } 

      public String getABCName() { 
       return ABCName; 
      } 
     } 

    } 

輸出:{ 「abcname」: 「富」}

然後我試圖與註釋ABCName:@JsonProperty( 「ABCName」)

我註釋後和運行代碼,這是我得到的:{「ABCName」:「Foo」,「abcname」:「Foo」}

它導致重複。

我有一個JSON客戶端將發送爲:「ABCName」:「Foo」,我需要在傑克遜處理它。

這個任何變通辦法?

謝謝你的時間。

回答

0

您可以嘗試genson http://code.google.com/p/genson/。下面的代碼應該產生你期待的結果。

public class MyPojo { 
    private String ABCName; 
    public void setABCName(String ABCName) { 
     this.ABCName = ABCName; 
    } 

    @JsonProperty("ABCName") 
public String getABCName() { 
     return ABCName; 
    } 
} 

結果:{ 「ABCName」: 「富」}

但是當你註釋字段,它造成了重複,意義

String json = "{\"ABCName\" : \"foo\"}"; 
MyPojo my = new MyPojo(); 
my.setABCName("Foo"); 

Genson genson = new Genson(); 
System.out.println(genson.serialize(my)); 
System.out.println(genson.deserialize(json, MyPojo.class).ABCName); 

public static class MyPojo { 
    private String ABCName; 
    public void setABCName(String ABCName) { 
     this.ABCName = ABCName; 
    } 

    @JsonProperty("ABCName") public String getABCName() { 
     return ABCName; 
    } 
} 
0

其實在與傑克遜本身工作那下面沒有工作:

public class MyPojo { 
     @JsonProperty("ABCName") 
     private String ABCName; 
     public void setABCName(String ABCName) { 
      this.ABCName = ABCName; 
     } 


    public String getABCName() { 
      return ABCName; 
     } 
    } 

結果:{ 「ABCName」: 「富」, 「abcname」: 「富」}

看起來像註釋已超出getter方法。

非常感謝。

0

你可以嘗試傑克遜本身設置註釋內省如下

公共類TestJackson {

public static void main(String args[]) throws Exception { 

     ObjectMapper mapper = new ObjectMapper(); 
     AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); 
     mapper.setAnnotationIntrospector(introspector); 
     MyPojo my = new MyPojo(); 
     my.setABCName("Foo"); 
     System.out.println(mapper.writeValueAsString(my)); 

    } 

    private static class MyPojo { 

     @JsonProperty("ABCName") 
     private String ABCName; 
     public void setABCName(String ABCName) { 
      this.ABCName = ABCName; 
     } 

     public String getABCName() { 
      return ABCName; 
     } 
    } 

}