【问题标题】:Gson custom error handlingGson 自定义错误处理
【发布时间】:2013-02-12 17:12:17
【问题描述】:

我正在尝试使用 Gson 库来解析一些 json 数据。来自服务器的响应可能是以下任何一种:

成功结果:

{myObject: {foo:"1", bar:"bleh"}}

故障结果:

{error: {message:"invalid token", code:320} }

似乎 Gson 只能处理一个返回类型,例如:

Gson gson = new Gson();
MyObject object = gson.fromJson(value, MyObject.class);

如何使用 Gson 正确解析提要中的数据/(错误),而不仅仅是自己解析 JSON?

【问题讨论】:

    标签: android gson


    【解决方案1】:

    因为你不知道你会得到什么,所以很难使用像 Gson 这样的东西并反序列化为 POJO。您实际上得到了一个带有“myObject”或“error”字段的对象。一种方法是简单地创建一个综合对象。在解析 JSON 时,Gson 将任何不存在的字段设置为 null,因此这样的东西可以正常工作:

    class JSONResponse {
        private MyObject myObject;
        private Error error;
    
        static class MyObject {
            String foo;
            String bar;
        }
    
        static class Error {
            String message;
            int code;
        }
    
        public boolean isError() {
            return error != null;
        }
    
        // Getters that access the fields of the objects
        // ...
    }
    

    【讨论】:

    • 谢谢!这是一个很好的解决方案。我最终在 json 中手动检查错误。
    • 感谢您的评论布赖恩,我删除了我的帖子。
    • 如果我收到 MyObject 数组,它可以工作吗?我担心静态原因所有对象都具有相同的值
    【解决方案2】:

    感谢@Brian。我最终只是像这样解析

    JsonParser parser = new JsonParser();
        parser.parse(value).getAsJsonObject();
    

    然后检查错误节点是否存在,以便我可以抛出服务器异常。如果节点不存在,那么我从那里使用 Gson。

    Gson gson = new GsonBuilder().create();
        ArrayList<GridItemVo> list = gson.fromJson(value, new TypeToken<ArrayList<GridItemVo>>(){}.getType());
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2018-03-23
      相关资源
      最近更新 更多