2

我正在尝试为解析来自 Google HTTP 客户端请求的 JSON 对象设置日期格式。由于日期格式问题,我尝试直接解析为对象的行request.execute().parseAs(..)不起作用。对象返回时没有任何值。下面的两行工作得很好,因为我可以设置日期格式。有没有办法以某种方式在 GsonFactory 上设置日期格式?

public class Main {
    static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
    static final JsonFactory JSON_FACTORY = new GsonFactory();

    public static void main(String[] args) throws IOException {

        HttpRequestFactory requestFactory =
                HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() {
                    @Override
                    public void initialize(HttpRequest request) {
                        request.setParser(new JsonObjectParser(JSON_FACTORY));
                    }
                });

        SomeURL url = new SomeURL("");
        HttpRequest request = requestFactory.buildGetRequest(url);

        MatchBlock[] blocks = request.execute().parseAs(MatchBlock[].class);
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
        MatchBlock[] blocks2 = gson.fromJson(request.execute().parseAsString(),MatchBlock[].class);
    }

}

代码主要是从这里提取的:示例。我已经尝试过 JacksonFactory 和 GsonFactory,包括在使用 Jackson 时使用 @JsonFormat 注释,似乎都不起作用。

我应该先解析为字符串,然后再解析为 JSON 对象,而不是尝试使用 parseAs 进行解析吗?似乎效率较低。

4

1 回答 1

0

不幸的是,我不确定这是否可以通过JsonFactory. gson 提供的GsonFactory使用JsonParser,它只是一个不做任何自定义转换的递归体面实现。

我处于类似的情况,我只是要Gson通过构建器创建一个对象,以便我可以相应地进行自定义。

于 2016-09-12T01:17:22.367 回答