Я пытаюсь использовать Spring для запроса HTTP GET.Весна: нет подходящего конвертера сообщений
Мой главный класс:
final String url = getString(R.string.myurl);
// Populate the HTTP Basic Authentitcation header with the username and password
String Usn = "username";
String ww = "password";
HttpAuthentication authHeader = new HttpBasicAuthentication(Usn, ww);
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAuthorization(authHeader);
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
System.out.println("Headers: " + requestHeaders.toString());
// Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
try {
// Make the network request
Log.d(TAG, url);
ResponseEntity<CatMessage> response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), CatMessage.class);
System.out.println(response.toString());
} catch (HttpClientErrorException e) {
Log.e(TAG, e.getLocalizedMessage(), e);
}
}
С CatMessage класса:
public class CatMessage {
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String message;
public int code;
}
Что я должен вернуться, потому что я использую не работает имя пользователя и пароль комбинацию (и это серверная часть работает отлично) , является:
{
"message": "You are not authorized to use this service", "code": 5201
}
Я думал, что это должно работать, потому что я в значительной степени копирует основные AUTH project of Spring for Android
Но что происходит, проблема с разбора (я думаю). Конечно, я включил зависимости Jackson и Spring, поэтому я не ожидаю, что мои проблемы будут там. Но я ожидаю очень маленький JSON, есть хорошо переведенный модель этого (CatMessage) и есть мои Джексон файлы включены, так что я подумал, что это должно работать ... но я получаю ошибку ниже:
02-22 00: 13: 42.977: E/AndroidRuntime (2052): вызвано: org.springframework.web.client.RestClientException: не удалось извлечь ответ: нет подходящего HttpMessageConverter, найденного для типа ответа [org.springframework.android.basicauth. CatMessage] и тип контента [текст/html] 02-22 00: 13: 42.977: E/AndroidRuntime (2052): at org.springframework.web.client.HttpMessageConverterExtractor.extractData (HttpMessageConverterExtractor.java:79) 02- 22 00: 13: 42,977: E/Andro idRuntime (2052): at org.springframework.web.client.RestTemplate $ ResponseEntityResponseExtractor.extractData (RestTemplate.java:655) 02-22 00: 13: 42.977: E/AndroidRuntime (2052): at org.springframework. web.client.RestTemplate $ ResponseEntityResponseExtractor.extractData (RestTemplate.java:641) 02-22 00: 13: 42.977: E/AndroidRuntime (2052): at org.springframework.web.client.RestTemplate.doExecute (RestTemplate.java : 484) 02-22 00: 13: 42.977: E/AndroidRuntime (2052): at org.springframework.web.client.RestTemplate.execute (RestTemplate.java:439) 02-22 00: 13: 42.977: E/AndroidRuntime (2052): at o rg.springframework.web.client.RestTemplate.exchange (RestTemplate.java:415)
У кого-нибудь есть идея, где моя проблема может быть? Это отстой, чтобы работать часами на чем-то, что кажется таким легким ... Спасибо!
Я думаю, что мой тип контента хорош: Content-Type: application/json. Есть ли способ, которым я могу распечатать запрос, прежде чем он будет разбираться в объект? поэтому я могу проверить, действительно ли мой JSON - это то, что я ожидаю? Всякий раз, когда я бросаю URL-адрес в браузере, он дает точное сообщение JSON i ... – Jasper
Это не запрос, который разобран, это ответ. Самый простой подход - отладить его. –
Да, я имел в виду ответ, в моем комментарии выше. Я не работаю, чтобы отлаживать ответы, я использую устройство, а не эмулятор ... Знаете ли вы каким-либо другим способом? Благодарю. – Jasper