GSON

2017-03-26 1 views
0
에 목록 개체를 직렬화하는 방법

나는 데이터는 아래의 아래의 방법 (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 TypeTokenTypeAdapter

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); 

답변

0

난 당신이, 당신이 직접 response transformer documentation의 마지막 조각 같은 새로운 GSON 객체를 사용할 수있는 응답 변압기를 입력 할 필요가 없습니다 것이라고 생각합니다. 그러면 다음과 같이 끝납니다 :

get("/data_on_page_load", (req, res) -> { 
     res.type("application/json; charset=UTF-8"); 
     List<Post> list = Post.findAll(); 
     System.out.println("list is " + list); 
     return list; 
    }, new Gson()::toJson);