У меня есть приложение 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?