2013-02-22 77 views
0

我想使用Spring的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 

}

我想這應該工作,因爲我幾乎複製了基本身份驗證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]和內容類型 [text/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):在 org.springframework.web.client.RestTemplate $ ResponseEntityResponseExtractor.extractData(RestTemplate.java:655) 02-22 00:13:42.977:E/AndroidRuntime(2052):在 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 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 ... – Jasper 2013-02-22 08:39:54

+0

這不是解析的請求,而是響應。最簡單的方法是調試它。 – 2013-02-22 09:56:10

+0

是的,我的意思是迴應,在我上面的評論中。我沒有得到它的工作來調試響應,我正在使用一個設備,而不是一個模擬器...你知道任何其他方式嗎?謝謝。 – Jasper 2013-02-22 10:37:01