Android with Spring Resttemplate:Error messageConverter

Android 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>

我正在用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>

<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类异步任务