2012-10-15 46 views
0

我正在連接到一個庫。我得到List<List> foodItemsList使用Jackson序列化Restlet列表

如何使用Jackson序列化foodItemsList?處理GET時發生這種情況。

我已經理解了如何使用Jackson/Restlet序列化一個對象,但我無法弄清楚它的列表。

對於此處的單個對象是我做的對profileSupportedInfo成員數據

@Get("json") 
public Representation represent(Variant variant) throws ResourceException { 
    : 
    ObjectMapper mapper = new ObjectMapper(); 
    String myFinString = mapper.writeValueAsString(profileSupportedInfo); 
    : 
    return myFinstring 
} 

的getter setter方法是什麼我提供。

之前創建映射對象,這裏是呼叫我做

List<List> totalfoodItem = someMemberFunc(); 
ObjectMapper mapper = new ObjectMapper 
// my question - how do I serialize totalFoodItem 

totalFoodItem在JSON的首選表示是如下

{ 
"food":[ 
     {"name":"apple","img_loc":"123_apple.jpg","energ":210,"food_unit":"1"}, 
     {"name":"rice","img_loc":"134_rice.jpg","energ":123,"food_unit":"100 gm"}, 
     : 
    ] 
} 

給我缺少/不理解? 謝謝

回答

1

恐怕爲了成功地序列化列表你必須把它變成一個數組。 JVM不會使用適當的類型信息對列表進行序列化(當您反序列化時,您只會得到一個通用對象列表),這不是傑克遜的錯。但是,如果序列化數組,則必須鍵入數組,並且數組內的對象也將保留它們的類型。

從你期望的JSON,看來你需要的是一個輔助類,它可以收集食物的信息,如下列:

public class Food { 
    private String name; 
    private String img_loc; 
    private String energ; 
    private String food_unit; 
    public FoodItem(String name, String value, String energ, String food_unit) { 
     this.name = name; 
     this.value = values; 
     this.energ = energ; 
     this.food_unit = food_unit; 
    } 
} 

現在,所有你需要的是具有食品對象的數組對象作爲屬性:

public class TotalFoodItem { 
    private Food[] food; 
    ... 
} 

並且您可以序列化該對象。傑克遜可能不會產生看起來完全像你想要的JSON的JSON(我自己沒有試過這個代碼),但它應該非常接近。

+0

謝謝 - 那正是我所做的 - – Abhi

+0

非常好!很高興我能幫上忙。 – Snapman