首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改:处理错误JSON响应

修改:处理错误JSON响应
EN

Stack Overflow用户
提问于 2015-10-27 00:13:07
回答 3查看 1.7K关注 0票数 0

如果成功,我的web服务器将以以下形式返回JSON (200状态代码):

代码语言:javascript
运行
复制
{"success":true,"data":{"user_id":"20","username":"Bob"}}

但是,如果出了问题(例如,如果输入的用户名和密码在表单中太短),它将以以下形式返回JSON (400状态代码):

代码语言:javascript
运行
复制
{"success":true,"errors":{"username":["Username too short"],"password":["Incorrect password","Password too short"]}}

如何在改造中处理这两种不同的响应?到目前为止,这是我的代码:

代码语言:javascript
运行
复制
RestAdapter restAdapter = new RestAdapter.Builder()
        .setEndpoint(URL)
        .build();

ApiEndpointInterface api = restAdapter.create(ApiEndpointInterface.class);

api.getToken('1', new Callback<DefaultResponse>() {
    @Override
    public void success(DefaultResponse json, Response response) {
        //
    }

    @Override
    public void failure(RetrofitError response) {
        //
    }
});

如何处理这两个结构不同的JSON响应?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-27 02:06:35

你需要做两件事。首先,不要从服务器返回400。正如其他人所说的,您实际上得到了来自服务器的成功响应,因此您只需要在您的端解析错误。

您的服务器可以返回指示登录成功或失败的标志。之后,您可以简单地将错误模型添加到DefaultResponse模型中。就像这样

代码语言:javascript
运行
复制
public class DefaultResponse {
        public boolean success;
        public DataModel data;
        public ErrorModel errors;


    public static class DataModel {
        private String user_id;
        private String username;
    }

    public static class ErrorModel { ... }
}

您仍然需要处理服务器使用OK以外的状态进行响应的实例,但通常来自服务器的错误响应是简单的纯文本,比如“坏请求”。当然,如果您希望从RetrofitError.getMessage()中提取json,可以插入json,但是GSON不会自动为您解析。我希望这能帮到你!

票数 2
EN

Stack Overflow用户

发布于 2015-10-27 00:42:10

您应该认识到,实际上,从网络请求的角度来看,您发布的两个响应都是成功的。失败状态是由于请求失败(网络连接错误、404等)。在尝试将用户登录到后端之后,您将不会失败。

您需要在成功方法中解析结果,并从应用程序逻辑的角度确定内部结果是否成功。

您还应该处理failure()。

票数 1
EN

Stack Overflow用户

发布于 2015-10-27 01:11:34

如果您从web服务中获得JSON,这意味着它是成功的。

因此,在成功的方法中,获取JSON并处理它

例如,从JSON格式

代码语言:javascript
运行
复制
    @Override
        public void success(DefaultResponse json, Response response) {
           try {
            JSONObject json = new JSONObject(json);
            JSONObject data = json.get("data"); // if no "data" element, it will throw JSONException
        } catch (JSONException e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(),"username to short",Toast.LENGTH_SHORT).show();
             }
        }

也可以使用葛森处理JSON数据

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33357830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档