Android with Spring Resttemplate:Error messageConverter
我正在用maven和SpringRestTemplate开发android应用程序 这是我的pom.xmlAndroid with Spring Resttemplate:Error messageConverter,android,spring,resttemplate,Android,Spring,Resttemplate,我正在用maven和SpringRestTemplate开发android应用程序 这是我的pom.xml <properties> <platform.version> 2.3.3</platform.version> <spring.version>1.0.0.RELEASE</spring.version> <simple-version>2.4.1</simple-version>
<properties>
<platform.version> 2.3.3</platform.version>
<spring.version>1.0.0.RELEASE</spring.version>
<simple-version>2.4.1</simple-version>
</properties>
<dependencies>
<!-- Spring Android Core -->
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Rest Android -->
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-rest-template</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Using Jackson for JSON marshaling -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.7.1</version>
</dependency>
<!-- Using Simple for XML marshaling -->
<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>${simple-version}</version>
<exclusions>
<exclusion>
<artifactId>stax</artifactId>
<groupId>stax</groupId>
</exclusion>
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>stax</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
<assetsDirectory>${project.basedir}/assets</assetsDirectory>
<resourceDirectory>${project.basedir}/res</resourceDirectory>
<nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
<sdk>
<platform>10</platform>
</sdk>
<emulator>
<avd>10</avd>
</emulator>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
在设备中运行应用程序时,这是logCat中显示的错误:
java.lang-IllegalArgumentException: 'messageConverters' must not be empty
坦斯克 您需要设置消息转换器,以便将响应解析为用户实例。根据您使用的服务器的响应类型,您应该提供不同的转换器,例如,如果您需要解析JSON,您可以使用:
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
在使用某些预定义转换器的情况下,您可能需要在项目中包含一些附加库(在本例中,您需要一个Jackson库)。您需要设置消息转换器,以便将响应解析为用户实例。根据您使用的服务器的响应类型,您应该提供不同的转换器,例如,如果您需要解析JSON,您可以使用:
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
在使用某些预定义转换器的情况下,您可能需要在项目中包含一些附加库(在本例中,您需要一个Jackson库)。设置消息转换器
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
Users user = restTemplate.getForObject(URL + "/{email}/{password}",
Users.class, email, passwd);
请参阅第2.7.3节中的更多内容,通过HTTP GET检索JSON数据
这是一个很好的例子 设置消息转换器
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
Users user = restTemplate.getForObject(URL + "/{email}/{password}",
Users.class, email, passwd);
请参阅第2.7.3节中的更多内容,通过HTTP GET检索JSON数据
这是一个很好的例子 我使用try/catch和inside方法找到了解决方案:
public Users obtainUser() {
try {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
ResponseEntity<Users> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, requestEntity, Users.class);
Users users = responseEntity.getBody();
return users;
} catch (Exception e) {
System.out.println("Error: " + e);
return null;
}
}
公共用户获得用户(){
试一试{
HttpHeaders requestHeaders=新的HttpHeaders();
setAccept(Collections.singletonList(新媒体类型(“应用程序”、“json”));
HttpEntity requestEntity=新的HttpEntity(requestHeaders);
RestTemplate RestTemplate=新RestTemplate();
restemplate.getMessageConverters().add(新映射JacksonHttpMessageConverter());
ResponseEntity ResponseEntity=restemplate.exchange(URL、HttpMethod.GET、requestEntity、Users.class);
Users=responseEntity.getBody();
返回用户;
}捕获(例外e){
System.out.println(“错误:+e”);
返回null;
}
}
同样使用android类AsyncTask我找到了使用try/catch和inside方法的解决方案:
public Users obtainUser() {
try {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
ResponseEntity<Users> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, requestEntity, Users.class);
Users users = responseEntity.getBody();
return users;
} catch (Exception e) {
System.out.println("Error: " + e);
return null;
}
}
公共用户获得用户(){
试一试{
HttpHeaders requestHeaders=新的HttpHeaders();
setAccept(Collections.singletonList(新媒体类型(“应用程序”、“json”));
HttpEntity requestEntity=新的HttpEntity(requestHeaders);
RestTemplate RestTemplate=新RestTemplate();
restemplate.getMessageConverters().add(新映射JacksonHttpMessageConverter());
ResponseEntity ResponseEntity=restemplate.exchange(URL、HttpMethod.GET、requestEntity、Users.class);
Users=responseEntity.getBody();
返回用户;
}捕获(例外e){
System.out.println(“错误:+e”);
返回null;
}
}
也使用android类异步任务