gson:根据类型从json参数化

时间:2012-07-01 09:13:58

标签: 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函数,或者比返回Object和铸造更好的东西
THX

1 个答案:

答案 0 :(得分:1)

在返回类型之前立即将<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>() {});