【问题标题】:Making a POST request using Camel使用 Camel 发出 POST 请求
【发布时间】:2017-02-04 20:50:16
【问题描述】:

我有一个骆驼路由配置为从 JMS 队列中读取并将其发布到服务。 我的路线是:

from("jms:queue")
.marshal()
.json(JsonLibrary.GSON)
.setHeader(Exchange.CONTENT_TYPE,constant("application/json"))
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.process(new Processor1())
.to("https4:xxxxxx?throwExceptionOnFailure=false")
.process(new MyProcessor())

我的配置:

HttpComponent httpc = getContext().getComponent("http4",HttpComponent.class);
httpc.setHttpConfiguaration(customHttpConfig())

在 customHttpConfig 中我设置了我的身份验证详细信息。

我从服务器收到 400 错误。但是我可以从 Postman api 访问服务器并获得成功的响应。

在我的 Processor1 类中(在发出请求之前),我能够打印消息的正文,其中包含我的对象的 json 表示。

但是在 POST 请求之后的处理器中,我正在这样做并得到以下响应:

Message in = exchange.getIn();
in.getBody(String.class); // print the error code 400
HttpServletRequest request = in.getBody(HttpServletRequest.class)// This is null.

我做错了什么?我需要将消息内容设置为我的发布请求的正文吗?

【问题讨论】:

  • 400 表示请求错误。所以这意味着您的请求消息或您的 URI 是错误的。服务器日志是否显示您的请求已发送并且看起来正确?服务器收到的 headers 呢?
  • 我无法访问服务器日志。正如我所提到的,我从 exchange.in 获得的请求对象为空。
  • 那是服务器的响应,如果你的意思是400错误请求?最简单的可能是设置您自己的本地服务器并首先对其进行测试。这样,您就可以在进行集成测试之前准确地看到您收到的标头以及正文的外观。这是一个简单的服务器,可以使用tinyserver.sourceforge.net
  • 哇..从来没有想过..会试试这个..
  • 检查类 HttpProducer.

标签: java post apache-camel


【解决方案1】:

不会是String.class:

in.getBody(String.class);

首先检查服务器响应的类型,然后尝试打印或记录交换正文。

应该是HttpServletResponse:

HttpServletRequest request = in.getBody(HttpServletRequest.class)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2021-05-18
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多