Android Spring:没有合适的消息转换器
我正在尝试使用Spring进行GET http请求 我的主要班级:Android Spring:没有合适的消息转换器,android,json,spring,jackson,Android,Json,Spring,Jackson,我正在尝试使用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"; Ht
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);
}
}
因为我使用的是无效用户名和密码组合(此服务器部件工作正常),所以我应该得到的是:
{
}
我认为这应该行得通,因为我几乎是在复制基本的auth
但发生的是解析的问题(我认为)。当然,我已经包含了Jackson和Spring的依赖关系,所以我不认为我的问题会出现。但我希望有一个非常小的JSON,有一个很好的映射模型(CatMessage),并包含我的Jackson文件,所以我认为这应该可以工作。。。但我得到的错误如下:
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):在
org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:79)
02-22 00:13:42.977:E/AndroidRuntime(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):在
org.springframework.web.client.restemplate.doExecute(restemplate.java:484)
02-22 00:13:42.977:E/AndroidRuntime(2052):在
org.springframework.web.client.restemplate.execute(restemplate.java:439)
02-22 00:13:42.977:E/AndroidRuntime(2052):在
org.springframework.web.client.restemplate.exchange(restemplate.java:415)
有人知道我的问题在哪里吗?在一件看起来很简单的事情上工作几个小时真糟糕。。。
谢谢大家! 您的代码看起来不错,我能想到的唯一解释是您正在调用的服务
text/JSON
的Content-Type
响应头或类似的内容(默认情况下,MappingJackson2HttpMessageConverter
只知道application/JSON
)您可以检查
内容类型
响应头(因为这正是restemplate
用来选择正确的HttpMessageConverter
)吗?我认为我的内容类型很好:内容类型:application/json。在将请求解析为对象之前,是否有一种方法可以打印请求?所以我可以检查我的JSON是否真的是我所期望的?每当我在浏览器中抛出URL时,它都会给出我发布的确切JSON…解析的不是请求,而是响应。最简单的方法就是调试它。是的,我在上面的评论中是指响应。我无法调试响应,我使用的是设备而不是模拟器。。。你知道还有别的办法吗?谢谢。只要尝试使用curl
或某个graphic rest客户端执行完全相同的请求,看看该响应是否有可疑之处。。。
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