2016-04-21 77 views
0

下面是現在的風格我已經有了一個簡單的信息,使用傑克遜:使用反序列化來編寫Java類來表示簡單JSON文檔的最簡潔方法是什麼?

public class FooRequest { 
    public final String foo; 
    public final int bar; 

    @JsonCreator 
    public FooRequest(
      @JsonProperty("foo") String foo, 
      @JsonProperty("bar") int bar) { 
     this.foo = foo; 
     this.bar = bar; 
    } 
} 

有一類註釋,在那裏,將處理鍋爐板構造?

+0

我認爲這個博客文章是相關的,達格,[傑克遜沒有註釋](https://manosnikolaidis.wordpress.com/2015/08/25/jackson-without-annotations/)。 – DavidS

+0

我想你應該在你的問題_(不是評論)中澄清你想要的東西。你想能夠序列化沒有構造函數的對象,或者你不想註釋你的類或其他東西嗎? – DavidS

回答

0

一個快速谷歌搜索提出了這一點:

Creating a json object using jackson

貌似可以處理與JsonNodeFactory建設。

final JsonNodeFactory factory = JsonNodeFactory.instance; 

這是你在找什麼?

0

您可以嘗試使用Jackson annotation。 Jackson註釋@JsonCreator用於告訴Jackson Java對象有一個構造函數(「創建者」),它可以將JSON對象的字段與Java對象的字段進行匹配。

讓我們考慮一下我們想要反序列化的JSON對象。

{ 
    "name":"Mr.Bond", 
    "age":"30" 
} 

您可以通過註釋與@JsonCreator的構造和使用@JsonProperty

public class UserProfileCreator { 
    public int age; 
    public String name; 

    @JsonCreator 
    public UserProfileCreator(
     @JsonProperty("age") int age, 
     @JsonProperty("name") String name) { 
      this.age = age; 
      this.name = name; 
    } 
} 

如何將它的工作解組消息?

讓我們寫一個小測試程序。

@Test 
public void deserialize() 
    throws JsonProcessingException, IOException { 

    String json = "{"age":30,"name":"Mr.Bond"}"; 
    UserProfileCreator obj = new ObjectMapper().reader(UserProfileCreator.class).readValue(json); 
    assertEquals("Mr.Bond", obj.name); 
} 
0

Google's gson library不需要你使用註釋或構造函數:

import com.google.gson.Gson; 
import java.util.Date; 
public class Test { 
    public static void main(String[] args) { 
     Gson gson = new Gson(); 

     String toJson = gson.toJson(new Thing()); 
     System.out.println(toJson); 
     // prints {"appleType":"granny","date":"Apr 21, 2016 10:31:17 AM","numPies":6} 

     Thing fromJson = gson.fromJson(toJson, Thing.class); 
     System.out.println(fromJson); 
     // prints [email protected] 
    } 
} 
class Thing { 
    String appleType = "granny"; 
    Date date = new Date(); 
    int numPies = 6; 
} 

傑克遜可能有類似的功能,但我不知道。

相關問題