【问题标题】:Apache Camel: How to get parameters sent to a Camel Servlet using a HTTP POST request by a smart way?Apache Camel:如何通过智能方式使用 HTTP POST 请求将参数发送到 Camel Servlet?
【发布时间】:2013-05-30 09:58:12
【问题描述】:

我正在编写一个可以使用 Camel Servlet 组件接收带有一些参数的 TXT 文件的路由。 根据Camel documentation,我应该在消息的标题中设置参数。 但在 HTTP POST 的情况下,似乎没有按预期填充标头。
我发现body里面包含了所有的请求、文件和参数。

这是一个内容示例:

------WebKitFormBoundaryC9GDMXt2OAHARCZj
Content-Disposition: form-data; name="upfile"; filename="user.txt"
Content-Type: text/plain
hello world...
...
------WebKitFormBoundaryC9GDMXt2OAHARCZj 
Content-Disposition: form-data; name="userdata" testtest 
------WebKitFormBoundaryC9GDMXt2OAHARCZj 
Content-Disposition: form-data; name="id" 12344 
------WebKitFormBoundaryC9GDMXt2OAHARCZj--

有人知道通过智能方式获取参数的方法吗?
我必须在我的处理器中制作自己的解析器吗?

【问题讨论】:

    标签: http servlets post parameters apache-camel


    【解决方案1】:

    埃里克,

    如果你使用HTTP POST,参数确实是在消息体中设置的。也许你应该在你的路由中实现一个处理器来从正文中获取参数并将它们设置在交换标头中,如果你需要的话

    最好的问候,

    【讨论】:

    • @ericg 你是怎么做到的?在camel.465427.n5.nabble.com/… 看到我的问题
    • @navaltiger 我使用 Tomcat 容器。我构建了自己的解析器来解析正文。有关格式的更多信息,请查看this
    【解决方案2】:

    在camel中我们可以获取HTTP post参数,我不确定是否获取Content-Disposition。如果我们想获得 Content-Disposition,我们可以编写自己的处理器方法。 但肯定能拿到参数,你提到的body内容就是你上传的文件内容。

    from(HTTP_INBOUND_URL)
            .log("The message : ${in.body}")
            .doTry()
                    .process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws Exception {
                            // TODO Auto-generated method stub
    
                            String templateId = exchange.getIn().getHeader("templateId",
                                    String.class);
    }
    })
    

    其中 templateId 是您的 HTTP 发布参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多