我無法使用Google的庫'gson'庫將gson轉換爲JSON。我正在使用Java Spark Web框架,並且ResponseTransformer是Spark lib的一部分。模型參數變量可以是任何POJO。將gson轉換爲JSON
public class JsonTransformer implements ResponseTransformer {
private Gson gson = new Gson();
@Override
public String render(Object model) {
String json = null;
if (model instanceof java.util.List) {
model = ((java.util.List) model).get(0);
}
try {
json = gson.toJson(model);
} catch (Exception e) {
e.printStackTrace();
System.exit(5);
}
return json;
}
}
當model是List對象時,gson庫在轉換/序列化爲json String時遇到了一些問題。
因此,這只是一個快速修復嘗試調試此:我試圖重新分配模型的第一個元素的模型列表,如果模型是一個List的實例。所以這更像是一個基本的Java問題......當我嘗試重新分配模型給模型的第一個元素時,Java不會讓這種情況發生。爲什麼?
另外,如果有人知道爲什麼gson在這種情況下失敗了,請LMK。這不應該發生。沒有明顯的無限遞歸發生。
爲了證明這一點,這裏是內容:
我得到一個無限遞歸堆棧跟蹤,但:。
java.lang.StackOverflowError的 在com.google.gson.internal $ Gson $ Types.resolve($ Gson $ Types.java:375) at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:380) at com.google.gson.internal 。$ Gson $ Types.resolve($ Gson $ Types.java:375) at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:380) at com.google.gson.internal。$ Gson $ Types.resolve($ Gson $ Types.java:375) at com.google.gson.internal 。$ Gson $ Types.resolve($ Gson $ Types.java:380) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1。(ReflectiveTypeAdapterFactory.java:82) at com.google.gson.internal.bind .ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory .java:72) at com.google.gson.Gson.getAdapter(Gson.java:356) at com.google.gson.internal.bind.ReflectiveTypeAdapterFa ctory $ 1(ReflectiveTypeAdapterFactory.java:82) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory。的java:118) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72) 在com.google.gson.Gson.getAdapter(Gson.java:356) 在com.google。 gson.internal.bind.ReflectiveTypeAdapterFactory $ 1。(ReflectiveTypeAdapterFactory.java:82) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81) at com.google.gson.internal.bind。 ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory .java:118) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72) at com.google.gson.Gson.getAdapter(Gson.java:356) at com.google .gson.internal.bind.ReflectiveTypeAdapterFactory $ 1。(ReflectiveTypeAdapterFactory.java:82) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81) at com.google.gson.internal.bind 。ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72) at com.google.gson.Gson.getAdapter(Gson.java:356) 在1 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $(ReflectiveTypeAdapterFactory.java:82) 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81) 在com.google。 gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72) at com.google.gson.Gson.getAdapter( Gson.java:356)
我試圖從一個POJO到JSON轉換的對象是這樣的:
public class Model {
private String id;
private String title;
private boolean done;
private Date createdOn;
public Model(BasicDBObject dbObject) {
this.id = ((ObjectId) dbObject.get("_id")).toString();
this.title = dbObject.getString("title") == null ? "placeholder title" : dbObject.getString("title");
this.done = ((Boolean)dbObject.getBoolean("done")) == null ? false : dbObject.getBoolean("done");
this.createdOn = dbObject.getDate("createdOn") == null ? new Date() : dbObject.getDate("createdOn");
}
}
你能分享異常嗎? – zengr
肯定會將它添加到問題 –
似乎有某種問題,其中程序試圖將模型的id字段設置爲一個ArrayList而不是一個字符串......這很奇怪 –