Разобрать ответное сообщение REST, используя модифицированный и наблюдаемый - PullRequest
1 голос
/ 15 марта 2019

Мой API возвращает это, когда я использую неправильную информацию для входа (используя почтальона):

{
    "error": {
        "statusCode": 401,
        "name": "Error",
        "message": "login failed",
        "code": "LOGIN_FAILED",
        "stack": "Error: login failed\n    at ...path..."
    }
}

Я использую этот метод, чтобы получить ответное сообщение:

private void handleResponse(retrofit2.Response<Response> response) {

            if (response.isSuccessful()) {
                emailField.setText(null);
                passwordField.setText(null);

                Intent intent = new Intent(getActivity(), MainActivity.class);
                startActivity(intent);
            } else {
                try {
                    showSnackBarMessage(response.errorBody().string());
                } catch (Exception e) {
                    showSnackBarMessage(e.getMessage());
                }
            }
}

И вывод (что показывает снэк-бар) такой же, как и у почтальона.

handleresponse параметр retrofit2.Response<Response> response состоит из retrofit2 Response и моего собственного <Response> класса, который выглядит следующим образом:

public class Response {
    @SerializedName("message")
    @Expose
    private String message;

    public String getMessage() {
        return message;
    }
}

Как я могу получить только message, чтобы показать в snackbar?

Я пробовал следующий код, но получаю только No value for message.

try {
     JSONObject jObjError = new JSONObject(response.errorBody().string());
     Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
} catch (Exception e) {
     Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}

1 Ответ

0 голосов
/ 15 марта 2019

Согласно вашему json телом ошибки ответа является объект с полем error, которое содержит поле message.Это означает, что вам сначала нужно получить объект ошибки, а затем сообщение:

JSONObject jObjError = new JSONObject(response.errorBody().string()).getJSONObject("error");
Toast.makeText(getContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
...