2016-12-01 1 views
0

コンテキストを設定するだけで、JSPでは次のようにオブジェクトのメソッドにアクセスできます。JSPのようにGsonで返されたデータをシリアル化することは可能ですか?

Class Student 

public Object getXXXWhichNeedsFewLogic() { 
    // Logic to get obj, which i don't want to store as a variable in this class. 
    return obj; 
} 

我々はJSPに学生のオブジェクトを渡すと、私たちがアクセスできる

student.XXXWhichNeedsFewLogic

のように、この方法は、それがGsonのシリアライズ時に同じことを達成することは可能ですか?最終出力JSONは

として値を含まなければならない{XXXWhichNeedsFewLogic:OBJ}以下

+0

*生徒オブジェクトをjspに渡すと、このメソッドにアクセスできます。* JSTLについて話していますか? –

+0

[the docs](https://github.com/google/gson/blob/master/UserGuide.md#TOC-Custom-Serialization-and-Deserialization)をチェックしようとしましたか?おそらくあなたはカスタムシリアライザから始めることができます。 –

+0

@Scary Wombat:はい、私はJSTLについて話していました。 –

答えて

0

は方法からの結果をシリアル化するためのサンプル・クラスです。

public class GsonTest { 

public static class Student { 
    public Object getXXXWhichNeedsFewLogic() { 
     return "foo"; 
    } 
} 

public static class GetterSerializer<T> implements JsonSerializer<T> { 
    @Override 
    public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) { 
     if (null == src) { 
      return new JsonNull(); 
     } 
     JsonObject obj = new JsonObject(); 
     for (Method m : src.getClass().getDeclaredMethods()) { 
      if (m.getName().startsWith("get") && m.getParameterCount() == 0) { 
       try { 
        obj.add(m.getName().substring(3), context.serialize(m.invoke(src))); 
       } catch (InvocationTargetException | IllegalAccessException e) { 
       } 
      } 
     } 
     return obj; 
    } 
} 
@Test 
public void testSerialization() { 
    System.out.println(
      new GsonBuilder() 
        .registerTypeAdapter(Student.class, new GetterSerializer<Student>()) 
        .create() 
        .toJson(new Student())); 
} 
関連する問題