【问题标题】:Android with Spring Resttemplate: Error messageConverter带有 Spring Resttemplate 的 Android:错误消息转换器
【发布时间】:2012-09-21 15:35:15
【问题描述】:

我正在使用 maven 和 spring resttemplate 开发 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>

在主活动中,我将此代码放入按钮中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnLogin = (Button) findViewById(R.id.btnLogin);

    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {

            String email = "user@xxxx.com";
            String passwd = "123456";

            restTemplate = new RestTemplate();

            try {
                Users user = restTemplate.getForObject(URL + "/{email}/{password}",
                                Users.class, email, passwd);

                if (user != null) {
                    System.out.println("Mi nombre es: " + user);
                }

            } catch (ResourceAccessException ex) {
                System.out.println("OFF");
            } catch (RestClientException ex) {
                System.out.println("Error");
            }
        }
    });

当我在设备中运行我的应用程序时,这是 logCat 中显示的错误:

java.lang-IllegalArgumentException: 'messageConverters' must not be empty

谢谢!!!!

【问题讨论】:

    标签: android spring resttemplate


    【解决方案1】:

    设置消息转换器

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
    Users user = restTemplate.getForObject(URL + "/{email}/{password}",
                                Users.class, email, passwd);
    

    请在Spring for Android Reference Manual 中的2.7.3 Retrieving JSON data via HTTP GET 部分查看更多信息。

    还有一个很好的例子here

    【讨论】:

      【解决方案2】:

      您需要设置消息转换器,以便可以将响应解析为用户实例。根据您使用的服务器的响应类型,您应该提供不同的转换器,例如如果您需要解析 JSON,您可以使用:

      restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
      

      如果使用一些预定义的转换器,您可能需要在项目中包含一些额外的库(在本例中,您需要一个 Jackson 库)。

      【讨论】:

        【解决方案3】:

        我使用 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;
            }
        }
        

        也使用android类AsyncTask

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多