0

我正在尝试将 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

}

我认为这应该可行,因为我几乎正在复制Spring for Android 的基本身份验证项目

但是会发生什么是解析的问题(我认为)。当然,我已经包含了 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): at 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): 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): 在 rg.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415)

有谁知道我的问题可能出在哪里?在看似如此简单的事情上工作几个小时真是太糟糕了……谢谢!

4

1 回答 1

0

您的代码看起来不错,我能想到的唯一解释是您正在调用的服务

  1. 不产生 JSON 内容。
  2. 它产生 JSON,但设置一个Content-Type响应头text/json或类似的东西(默认情况下MappingJackson2HttpMessageConverter唯一知道的)。application/json

你能检查一下Content-Type响应头吗(因为这是RestTemplate选择正确的东西HttpMessageConverter)?

于 2013-02-22T00:26:37.173 回答