防止某些字段被序列化

Jas*_*zek 5 serialization json playframework

在Play框架中,我有一些模型,其中的字段是对其他模型的对象引用.当我使用renderJSON时,我不希望包含这些对象引用.目前,根据我的需要,我创建了一个单独的视图模型类,其中包含我想要的字段,并在控制器中根据需要创建此视图类的实例.理想情况下,我希望能够使用模型类本身,而无需编写视图类.

有没有办法注释一个字段,以便在使用renderJSON时不会序列化?

Joh*_*uer 11

因为Play使用Gson进行Json序列化,你可以尝试以下方法:

public static void test()  
{  
    Object foo = new SomeObject("testData");  
    Gson gson = new GsonBuilder()
        .excludeFieldsWithModifiers(Modifier.TRANSIENT)  
        .create();
    renderJSON(gson.toJson(foo));  
}
Run Code Online (Sandbox Code Playgroud)

现在标记为瞬态的每个字段都不会被序列化.还有另一种(更好的)方式.您可以使用com.google.gson.annotations.Expose注释标记要序列化的每个字段.

public static void test()  
{  
    Object foo = new SomeObject("testData");  
    Gson gson = new GsonBuilder()
        .excludeFieldsWithoutExposeAnnotation()  
        .create();
    renderJSON(gson.toJson(foo));  
}
Run Code Online (Sandbox Code Playgroud)