0

我正在连接图书馆。我明白了List<List> foodItemsList

如何foodItemsList使用 Jackson 进行序列化?这是在处理 GET 时发生的。

我已经了解如何使用 Jackson/Restlet 序列化对象,但我无法找出列表。

对于单个对象,这是我所做的

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

profileSupportedInfo 中成员数据的 getter setter 是我提供的。

在创建映射器对象之前,这是我所做的调用

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

JSON 中的首选表示totalFoodItem形式如下所示

{
 "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"},
       :
   ]
}

我错过了什么/无法理解?谢谢

4

1 回答 1

1

恐怕为了成功序列化一个 List 你必须把它变成一个数组。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;
    }
}

现在你所需要的只是一个具有 Food 对象数组作为属性的对象:

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

你可以序列化那个对象。Jackson 可能不会生成看起来与您想要的 JSON 完全相同的 JSON(我自己没有尝试过此代码),但它应该非常接近。

于 2013-09-11T15:33:35.553 回答