我有一个像下面这样的列表,
List<Item> EquipmentData = SAPEquipment.getByFilter(filter);
该项目是我从SAP获得的结果(&#34; com.vaadin.data.util.sqlcontainer.RowItem&#34;)
我的问题是我需要将该List转换为Json格式。我一直在阅读一些例子并尝试使用Gson:
Gson gson = new Gson();
gson.toJson(EquipmentData);
也试过了一个项目
gson.toJson(EquipmentData.get(0));
报告的错误如下:
java.lang.StackOverflowError
com.google.gson.stream.JsonWriter.string(JsonWriter.java:559)
com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:402)
com.google.gson.stream.JsonWriter.beginObject(JsonWriter.java:307)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:214)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)
com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219)
com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:899)
我无法修改该列表,因此我需要一种正确的方法来转换它。
任何提示都将受到高度赞赏
编辑:添加了项目类链接(vaadin.com/api/com/vaadin/data/Item.html)
EDIT2:添加了完整的stacktrace /
答案 0 :(得分:1)
迭代列表中的每个项目并将其添加到JSON对象中。请参阅this answer。
答案 1 :(得分:0)
Stackoverflow
的原因可能是因为项类中的递归映射。解决此问题的一种方法是遍历EquipmentData
列表并设置返回对象( DTO ),然后使用GSON
转换 DTO 。< / p>