当前位置: 首页 > 知识库问答 >
问题:

Spring:没有合适的消息转换器

夏侯鹏
2023-03-14

我正在尝试使用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的基本auth项目

但是发生的是解析的问题(我认为)。当然,我已经包含了Jackson和Spring依赖项,所以我不希望我的问题出现在那里。但是我希望一个非常小的JSON,有一个很好的映射模型(CatMessage),并包括我的杰克逊文件,所以我认为这应该工作...

02-22 00:13:42.977:E/AndroidRuntime(2052):原因:组织。springframework。网状物客户RestClientException:无法提取响应:未找到响应类型[org.springframework.android.basicauth.CatMessage]和内容类型[text/html]02-22 00:13:42.977:E/AndroidRuntime(2052):位于org的合适的HttpMessageConverter。springframework。网状物客户HttpMessageConverterExtractor。extractData(HttpMessageConverterExtractor.java:79)02-22 00:13:42.977:E/AndroidRuntime(2052):位于org。springframework。网状物客户RestTemplate$ResponseEntityResponseExtractor。extractData(RestTemplate.java:655)02-22 00:13:42.977:E/AndroidRuntime(2052):位于org。springframework。网状物客户RestTemplate$ResponseEntityResponseExtractor。extractData(RestTemplate.java:641)02-22 00:13:42.977:E/AndroidRuntime(2052):位于org。springframework。网状物客户RestTemplate。doExecute(RestTemplate.java:484)02-22 00:13:42.977:E/AndroidRuntime(2052):位于org。springframework。网状物客户RestTemplate。执行(restemplate.java:439)02-22 00:13:42.977:E/AndroidRuntime(2052):在org。springframework。网状物客户RestTemplate。exchange(RestTemplate.java:415)

有人知道我的问题在哪里吗?在一件看起来很简单的事情上工作几个小时真糟糕。。。非常感谢。

共有1个答案

潘佐
2023-03-14

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

  1. 不产生JSON内容。
  2. 它生成JSON,但设置了一个Content-Type响应头的text/json或类似的内容(默认情况下,MappingJackson2HttpMessageConzer只知道Application/json)。

您可以检查Content-Type响应头(因为这是由RestTemboard用来选择适当的HttpMessageConzer)吗?

 类似资料:
  • Spring JMS中的类具有setter方法,它允许提供我们想要的任何转换器。 对于带注释的消息侦听器,这很有意义,因为我们可以直接定义 spring将负责将消息转换并传递给这个侦听器。 因此,这对于带注释的听者来说显然是有意义的。我的问题是,设置消息转换器对非注释消息侦听器有用吗?类似于 从我在docs/javadocs中的搜索和对源代码的有限理解来看,我认为为这种情况设置消息转换器是没有帮助

  • 我在使用spring-jms模块转换来自RabbitMQ的消息时遇到了一些问题。以前,我使用Rest APIendpoint发送消息,该endpoint将消息发送到RabbitMQ队列,并使用@JMSListener方法处理它。 在内部,这种行为添加了一个字段来确定Java类型,由Spring库管理。但是,现在我想避免Rest API调用,因为它不是必需的,而且我可以直接将消息发送到RabbitM

  • 使用MVC Java编程配置方式时,如果你想替换Spring MVC提供的默认转换器,完全定制自己的HttpMessageConverter,这可以通过覆写configureMessageConverters()方法来实现。如果你只是想定制一下,或者想在默认转换器之外再添加其他的转换器,那么可以通过覆写extendMessageConverters()方法来实现。 下面是一段例子,它使用定制的Ob

  • 问题内容: 我遵循此示例在Spring中设置TCP客户端。下面是变压器所在的我的文件。有人可以帮助我删除变压器并按原样发送数据吗?如果我尝试删除该行甚至将其设置为null,则在构建项目时会遇到异常。 编辑: 现在,我可以使用自定义的序列化器/解串器发送消息了。但是很遗憾,我无法收到回复。这是我的序列化器/反序列化器: 我在序列化器/反序列化器的第一行完成了一些日志记录,但是从未打印过该日志。反过来

  • 消费者使用Spring的JavaConfig类如下: Kafka主题侦听器使用@KafkaListener注释,如下所示: 我的pom包括依赖项: 现在当我打包到war并部署到tomcat时,它不会显示任何错误,即使在调试模式下也不会显示任何错误,只是部署war什么都没有。 请帮助我了解是否缺少触发kafkalistner的某些配置。 谢谢Gary我添加了上下文。xml和web。xml,但我得到了

  • 在将我们的一个服务升级到2.0.0.rc3时,当试图使用一个使用较旧版本-ditmars的服务生成的消息时,我们遇到了一个异常。发行版: 错误31241---[container-4-C-1]O.S.Integration.Handler.LoggingHandler:org.SpringFramework.Messaging.Converter.MessageConversionExceptio