是否有可能像JSP一样序列化Gson中方法返回的数据?

时间:2016-12-01 06:02:05

标签: java serialization gson

只是为了设置上下文,在JSP中,我们可以按如下方式访问对象的方法。

Class Student

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

如果我们将student对象传递给jsp,我们可以像

一样访问这个方法
  

student.XXXWhichNeedsFewLogic

在Gson序列化期间是否可以实现相同的目标?最终输出json应包含值

  

{XXXWhichNeedsFewLogic:obj}

1 个答案:

答案 0 :(得分: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()));
}