2013-02-22 7 views
0

Я пытаюсь использовать 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)

У кого-нибудь есть идея, где моя проблема может быть? Это отстой, чтобы работать часами на чем-то, что кажется таким легким ... Спасибо!

ответ

0

Ваш код выглядит нормально, и единственное объяснение, которое я могу думать о том, что сервис вы звоните

  1. Не производит контент в формате JSON.
  2. Он производит JSON, но устанавливает Content-Type ответный ответ от text/json или что-то в этом роде (MappingJackson2HttpMessageConverter знает только о application/json).

Вы можете проверить заголовок ответа на Content-Type (так как это очень вещь используется RestTemplate для выбора правильного HttpMessageConverter)?

+0

Я думаю, что мой тип контента хорош: Content-Type: application/json. Есть ли способ, которым я могу распечатать запрос, прежде чем он будет разбираться в объект? поэтому я могу проверить, действительно ли мой JSON - это то, что я ожидаю? Всякий раз, когда я бросаю URL-адрес в браузере, он дает точное сообщение JSON i ... – Jasper

+0

Это не запрос, который разобран, это ответ. Самый простой подход - отладить его. –

+0

Да, я имел в виду ответ, в моем комментарии выше. Я не работаю, чтобы отлаживать ответы, я использую устройство, а не эмулятор ... Знаете ли вы каким-либо другим способом? Благодарю. – Jasper

Смежные вопросы