0

我有一个 Spring Boot 2 REST 应用程序。我正在使用 Angular 的 REST,最近我使用 Spring for Android 2.0.0M3 库制作了一个 Android 应用程序。

通常我会像这样进行 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 中的所有信息(简而言之,我没有正文)。

如何使用 Spring 库在 Android 中管理类型化回复和结构化异常?

4

0 回答 0