Я использую gson, чтобы связать немного json с pojo.Когда я не использую OSGI, все связывается идеально, поэтому я чувствую, что тип класса полностью игнорируется из-за какой-то проблемы с загрузчиком классов, потому что вложенная коллекция становится пустой после анализа.
У меня есть абстрактный обобщенный класс, который выполняет привязку в отдельном пакете:
public <T> T deserialize(String jsonString, Class<T> clazz) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
return gson.fromJson(jsonString, clazz);
}
Этот подход работает без OSGI, но когда я использую OSGI, он связывает только элементы верхнего уровнякоторые существуют в классе T
, но не во вложенном внутреннем классе.
Чтобы лучше проиллюстрировать элементы «верхнего уровня», title
и description
правильно десериализованы в POJO, но theThings равно null.Нужно ли как-то встраивать этот вложенный подтип в общий?
Это сигнатура класса, содержащая метод deserialize
.
public abstract class MyAbstractClass<T>
{
"title": "my awesome title",
"description": "all the awesome things",
"theThings": [
{
"thing": "coolThing1",
"association-type": "thing"
},
{
"thing": "coolThing2",
"association-type": "thing"
}
]
}
Класс POJO, к которому привязан JSON:
package things;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class ThingsPOJO implements Serializable
{
@SerializedName("title")
@Expose
public String title = "";
@SerializedName("description")
@Expose
public String description = "";
@SerializedName("theThings")
@Expose
public List<TheThing> theThings = null;
private class TheThing implements Serializable
{
@SerializedName("thing")
@Expose
public String thing = "";
@SerializedName("association-type")
@Expose
public String associationType = "";
}
}