У меня возникли проблемы с преобразованием gson в JSON, используя библиотеку Google gson. Я использую веб-фреймворк Java Spark, а 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;
}
}
есть какая-то проблема, когда модель объекта List, библиотека gson испытывает проблемы преобразования/сериализации в JSON String.
Так что это просто быстрое решение, чтобы попытаться отладить это: я пытаюсь переназначить модель для первого элемента списка моделей, если модель является экземпляром List. Так что это скорее основной вопрос Java ... Когда я пытаюсь переназначить модель для первого элемента модели, Java не позволяет это произойти. Почему это так?
Кроме того, если кто-нибудь знает, почему в этом случае gson так тяжело, пожалуйста, LMK. Этого не должно быть. Нет очевидной бесконечной рекурсии.
Чтобы доказать это, здесь содержание:
Я получаю бесконечную рекурсию StackTrace хотя:.
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) на 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) в com.google.gson.internal.bind.ReflectiveTypeAdapterFactory 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)
объект Я пытаюсь преобразовать из 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 вместо String ... это странно –