Spring Android декодирует исключение JSON - PullRequest
0 голосов
/ 19 мая 2018

У меня есть приложение Spring Boot 2 REST.Я использую REST от Angular, и недавно я сделал приложение для Android, используя библиотеку Spring для Android 2.0.0M3.

Обычно я делаю вызов REST, как это:

private class Login2 extends AsyncTask<Void, Void, ResponseEntity<JwtAuthenticationResponse>> {
        private RestClientException error = null;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected ResponseEntity<JwtAuthenticationResponse> doInBackground(Void... params) {
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
            try {
                String url = UtilityFunctions.getBaseUrl(LoginActivity.this) + Globle.LOGIN;
                ResponseEntity<JwtAuthenticationResponse> jwtToken = restTemplate.postForEntity(url, new LoginRequest(mEditTextUserName.getText().toString(), mEditTextPassword.getText().toString()), JwtAuthenticationResponse.class);
                return jwtToken;
            } catch (RestClientException e) {
                this.error = e;
                Logcat.e(TAG, e.getMessage());                   
                return null;
            }
        }

        @Override
        protected void onPostExecute(ResponseEntity<JwtAuthenticationResponse> response) {
            //hide progress bar
            mProgressBar.setVisibility(View.GONE);
            if(error != null){
                String title = "";
                new AlertDialog.Builder(LoginActivity.this)
                        .setTitle(Html.fromHtml("<font color='#04C1D9'>" + title + "</font>"))
                        .setMessage(error.getMessage())
                        .setPositiveButton(getResources().getString(R.string.ok), null)
                        .show();
            }
            if (response != null) {
                HttpStatus status = response.getStatusCode();
                JwtAuthenticationResponse body = response.getBody();
            }
        }
    }

Сервервернуть 2 разных типа исключений.Нормальное исключение и исключение проверки.Обычное исключение выглядит так:

{
    "timestamp": "2018-05-19T08:49:23.689+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Credenziali non valide. Controllare i dati inseriti e ripetere l'operazione.",
    "path": "/api/v1/auth"
}

Исключение проверки выглядит так:

{
  "errors" : [ {
    "entity" : "Hotel",
    "property" : "fax",
    "invalidValue" : "+39 ",
    "message" : "Il numero di telefono non è valido. Dovrebbe essere nel formato E.123 internazionale (https://en.wikipedia.org/wiki/E.123)." 
  } ]
}

Мой код Android работает хорошо, если я не исключение, но у меня есть (давайтескажем, 401) RestClientException содержит не всю информацию, возвращаемую в JSON с сервера (короче говоря, у меня нет тела).

Как я могу управлять как типизированным ответом, так и структурированным исключением вAndroid с библиотекой Spring?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...