我正在尝试使用Spring进行GET http请求。
我的主要课程:
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 / AndroidRuntime(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 :(得分:0)
您的代码看起来不错,我能想到的唯一解释是您正在调用的服务
Content-Type
响应标头text/json
或类似的内容(MappingJackson2HttpMessageConverter
默认只知道application/json
。)您可以查看Content-Type
响应标头(因为这是RestTemplate
用来选择正确的HttpMessageConverter
)的内容吗?