java - gson:根据类型参数化 fromJson

标签 java json casting gson

很抱歉,肯定已经有人问过了,但我没有找到我需要的东西
我有几种消息类型:

class AbstractMessage {
    int code;
    String token;
}

class ShareMessage extends AbstractMessage{
    String user;
    Map<String, String> friends;
}

class PostMessage extends AbstractMessage{
    String user;
    Map<String, String> data;
}

以及从 json post 消息中解码它们的方法:

public Object getMessage(BufferedReader r, Type t){
    Object o = null;
    try{
        o = g.fromJson(r, t);
    } catch (final JsonSyntaxException e) {
        LOGGER.info("Error in Json format", e);
    } catch (final JsonParseException e) {
        LOGGER.info("Error in parsing Json", e);
    }

    return o;
}

那么例如:

Type dataType = new TypeToken<PostMessage>() {}.getType();
PostMessage m = (PostMessage) getMessage(request.getReader(), dataType);

可以工作,但是很难看,我怎样才能有一个参数化的 getMessage 函数,或者比返回对象和转换更好的东西
谢谢

最佳答案

添加<T>到方法签名,紧接在返回类型之前。这将创建一个类型参数化方法:

public <T> T getMessage(BufferedReader r, TypeToken<T> typeToken){
  try {
    return g.fromJson(r, typeToken.getType());
  } catch (final JsonSyntaxException e) {
    LOGGER.info("Error in Json format", e);
  } catch (final JsonParseException e) {
    LOGGER.info("Error in parsing Json", e);
  }
  return null;
}

这样调用它:

PostMessage m = getMessage(request.getReader(), new TypeToken<PostMessage>() {});

关于java - gson:根据类型参数化 fromJson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11280837/

相关文章:

java - 你如何使用 gmail java api 获取 gmail 用户的电子邮件地址?

java - 如何使用 Google 的 Gson API 正确反序列化 JSON?

json - 在 Grails 中制作和自定义 JSON 响应的最佳方式?

java - OKHTTP——发布用户输入数据,检索 JSON 响应以确定成功

java - 使用ant build读取java中的静态文件

java - 应用程序卡在 serverSocket.accept() 并提供已在第二次调用线程时使用的绑定(bind)异常地址

c# - 如何在 C# 中将 UIntPtr 对象转换为 IntPtr?

java - 如何在 Java 中将 char 或 int 发送到需要 string 作为 s 参数的方法?

java - 在 Java 中输入未知数量的变量

将 Rc<ConcreteType> 转换为 Rc<Trait>