gson 处理2种不同错误响应,用于成功和失败的改造2

wwodge7n  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(174)

我目前的成功回应是:

{"status":"success","message":"msg here"}

代码为200
我的错误回答是:

{"status":"failure","message":"There was a validation error","errors":{"shippingAddress":{"phoneNumber":"Please enter a valid phone number"}}}

代码为400
我的问题是下面的代码不工作,因为它总是进入onFailure()

if (response.isSuccessful()) {
            // do something

        } else if (response.code() == 400) {
            Gson gson = new Gson();
            ErrorPhone message = null;
            if (response.errorBody() != null) {
                message = gson.fromJson(response.errorBody().charStream(), ErrorPhone.class);
            }
            if (message != null) {
                Toast.makeText(context, message.getErrors().getShippingAddress().getPhoneNumber(), Toast.LENGTH_LONG).show();
            } else {
                String errors = "";
                try {
                    JSONObject jObjError = new JSONObject(response.errorBody().string());
                    errors = jObjError.getJSONObject("errors").getJSONObject("shippingAddress").getString("phoneNumber");
                } catch (JSONException | IOException e) {
                    e.printStackTrace();
                }
                if (!errors.equals("")) {
                    Toast.makeText(context, errors, Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(context, response.message(), Toast.LENGTH_LONG).show();
                }
            }
        }

并且在onFailure中,我无法侦听errorBody来处理响应

nc1teljy

nc1teljy1#

使用名为onResponseRetrofit接口,并将代码放在那里。由于Retrofit使用两种不同的callback方法来处理网络请求的两种可能结果:失败成功请求。Retrofit将根据结果调用相应的回调方法。如果请求成功,Retrofit还将向您传递服务器的响应。
有关更多信息,请查看此链接:https://square.github.io/retrofit/2.x/retrofit/retrofit2/Callback.htmlhttps://futurestud.io/tutorials/java-basics-for-retrofit-callbacks,这将帮助您更深入地了解Call-backs改造

相关问题