使用Gson进行序列化错误

时间:2017-03-26 06:44:54

标签: java serialization gson spark-java

我使用以下代码进行序列化:

public class JsonTransformer implements ResponseTransformer {

    private Gson gson = new Gson();

    @Override
    public String render(Object model) {
        GsonBuilder gsonBuilder = new GsonBuilder();
        return gson.toJson(model);
    }
}

我收到错误:

java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: com.soul.seeker.models.Post. Forgot to register a type adapter?

如何序列化列表并在下面的代码中返回它?

get("/data_on_page_load", "application/json", (Request request, Response response) -> {
    List<Post> list = Post.findAll();
    return list;
}, new JsonTransformer());

pojo class:

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
}

更新

当我尝试使用以下方式时:

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

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

当我将它传递回客户端时,它会在json对象中返回不必要的信息:

Array[2]
0:Object
attributes:Object
cachedChildren:Object
cachedParents:Object
compositeKeyPersisted:false
dirtyAttributeNames:Array[0]
errors:Object
frozen:false
manageTime:true
metaModelLocal:Object
modelRegistryLocal:Object
__proto__:
Object1:Object
length:2
__proto__:Array[0]

有意义的是ClassTypeAdapter是我修改代码以将正确的列表对象作为json返回并排除无关信息的地方,但我仍然是序列化的新手。

0 个答案:

没有答案