【问题标题】:Spring: no suitable message converterSpring:没有合适的消息转换器
【发布时间】:2013-02-07 12:11:58
【问题描述】:

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

}

我认为这应该可行,因为我几乎在复制基本身份验证 project of 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] 和内容类型 [文本/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.RestTemplate.doExecute(RestTemplate.java:484) 02-22 00:13:42.977: E/AndroidRuntime(2052): 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439) 02-22 00:13:42.977: E/AndroidRuntime(2052): 在 o rg.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415)

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

【问题讨论】:

    标签: android json spring jackson


    【解决方案1】:

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

    1. 不生成 JSON 内容。
    2. 它会生成 JSON,但会设置 Content-Type 响应标头 text/json 或类似的东西(MappingJackson2HttpMessageConverter 默认只知道 application/json)。

    您能否检查Content-Type 响应标头(因为这是RestTemplate 用来选择正确HttpMessageConverter 的东西)?

    【讨论】:

    • 我觉得我的内容类型不错:Content-Type: application/json。有没有办法在将请求解析为对象之前打印请求?所以我可以检查我的 JSON 是否确实是我所期望的?每当我将 URL 扔到浏览器中时,它都会准确地给出我发布的 JSON...
    • 解析的不是请求,而是响应。最简单的方法是对其进行调试。
    • 是的,我的意思是回应,在我上面的评论中。我无法调试响应,我使用的是设备而不是模拟器......你知道其他方法吗?谢谢。
    • 尝试使用 curl 或其他图形客户端执行完全相同的请求,看看该响应是否有任何可疑之处...
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多