나는 데이터는 아래의 아래의 방법 (spark-java framework에서 방법)을 이용하여 DB에서 돌아왔다 : GSON
get("/data_on_page_load", "application/json", (Request request, Response response) -> {
List<Post> list = Post.findAll(); // NEED TO SERIALIZE THE RESPONSE
System.out.println("list is " + list);
return (list);
}, new JsonTransformer());
데이터는 DB에서 반환을 :
[Model: com.soul.seeker.models.Post, table: 'post', attributes: {created_at=2017-03-26 04:06:35.0, details=aaa, id=36, title=Eventsa, url=eventsa, userImage=assets/img/spiritual-icon4.png, username=null}]
Post.findAll();
public class Post extends Model{
private String title;
private String details;
private String username;
private String userImage;
private String url;
private List categories;
//Getters and Setters removed for brevity
}
나는 밖으로 GSON TypeToken 및 TypeAdapter
ClassTypeAdapterFactory 사용하여 넣어 직렬화하려고 :
을는 http://javalite.io/record_selection#finding-all-records의 방법은Model: com.soul.seeker.models.Post
아래의 POJO 클래스의 모든 기록을 얻을 것입니다
public class ClassTypeAdapterFactory implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
if(!Class.class.isAssignableFrom(typeToken.getRawType())) {
return null;
}
return (TypeAdapter<T>) new ClassTypeAdapter();
}
}
ClassTypeAdapter : 여기
public class ClassTypeAdapter extends TypeAdapter<Class<?>> {
@Override
public void write(JsonWriter jsonWriter, Class<?> clazz) throws IOException {
if(clazz == null){
jsonWriter.nullValue();
return;
}
jsonWriter.value(clazz.getName());
}
@Override
public Class<?> read(JsonReader jsonReader) throws IOException {
if (jsonReader.peek() == JsonToken.NULL) {
jsonReader.nextNull();
return null;
}
Class<?> clazz = null;
try {
clazz = Class.forName(jsonReader.nextString());
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return clazz;
}
}
내가 JsonTransformer
을 사용하고 ResponseTransformer
public class JsonTransformer implements ResponseTransformer {
private Gson gson = new Gson();
@Override
public String render(Object model) {
GsonBuilder gsonBuilder = new GsonBuilder();
gson = gsonBuilder.registerTypeAdapterFactory(new ClassTypeAdapterFactory()).create();
return gson.toJson(model);
}
}
spark-java ResponseTransformer interface에서 지금 문제가 밖으로도 넣어 JSON이다 구현하는 POJO 클래스의 반환 목록 개체 대신 직렬화 클래스를 포함 . Java & Gson serialization을 처음 접했습니다.
List 개체 만 반환하도록 TypeAdapter를 구현하는 데 도움이 될 수 있습니까? 이 같은 예를 들어 :
Type listOfTestObject = new TypeToken<List<TestObject>>(){}.getType();
String s = gson.toJson(list, listOfTestObject);
List<TestObject> list2 = gson.fromJson(s, listOfTestObject);