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

不允许Apache Camel REST DSL 405方法

何骞尧
2023-03-14

我目前正在用Apache Camel(使用camel-spring)开发一个REST应用程序,并得到了一些令人困惑的行为。我在REST DSL中定义了一组endpoint,有些只是对另一个服务器的代理请求,有些则传递到我为数据聚合定义的路由上。DSL如下所示:

<rest>
  <!-- Specific DSL requests -->
  <get uri="/v1/aggregate/data" consumes="application/json" produces="application/json">
    <to uri="direct:dataEnrichment" />
  </get>
  <get uri="/v1/customer/{custId}/devices" consumes="application/json" produces="application/json">
    <to uri="direct:getCustomerDevices" />
  </get>
  <get uri="/v1/login/{custId}" consumes="application/json" produces="application/json">
    <to uri="direct:getCustomer" />
  </get>
  <get uri="/v1/status" consumes="application/json" produces="application/json">
    <to uri="direct:statusInfo" />
  </get>

  <!-- Proxy requests -->
  <post uri="/v1?matchOnUriPrefix=true&amp;chunked=false">
    <to uri="direct:proxyOut" />
  </post>
  <get uri="/v1?matchOnUriPrefix=true&amp;chunked=false">
    <to uri="direct:proxyOut" />
  </get>
  <put uri="/v1?matchOnUriPrefix=true&amp;chunked=false">
    <to uri="direct:proxyOut" />
  </put>
  <delete uri="/v1?matchOnUriPrefix=true&amp;chunked=false">
    <to uri="direct:proxyOut" />
  </delete>
</rest>

其思想是,没有完全匹配URI的任何请求都可以通过另一个系统(不是Apache Camel)进行代理。这使我不必为其他系统上的每个REST API编写定义(有很多)。

所有的工作都很好,直到我在URI中添加了两个带有{custId}的请求。这些请求工作得很好,但每次我尝试一个应该通过代理的URI时,我都得到405方法不允许。

<restConfiguration contextPath="/mobilegateway/api" scheme="http"
  host="0.0.0.0" bindingMode="off"
  enableCORS="true"
  component="jetty" port="8079">
  <endpointProperty key="handlers" value="securityHandler" />
  <endpointProperty key="sessionSupport" value="true" />
  <endpointProperty key="httpClient.idleTimeout" value="30000" />

</restConfiguration>
<route id="proxyOutbound">
  <description>A simple outbound route to proxy REST requests.</description>
  <from uri="direct:proxyOut" />
  <removeHeaders pattern="Authorization" />
  <to
    uri="http://{{remoteAddress}}/data/json?bridgeEndpoint=true&amp;throwExceptionOnFailure=false" />
</route>

是我做错了什么,还是这是camel/camel-spring中的一个bug?

共有1个答案

梁丘霖
2023-03-14

类似的bug仍然存在,我在这里提交了一个:

https://issues.apache.org/jira/browse/camel-15363

我已经设法为我的情况做了一个变通办法,请参阅我在错误跟踪器中的评论

 类似资料:
  • 我有一个非常简单的Spring引导应用程序,它由以下代码保护: 这个想法是为了保护“admin”部分。它公开了一个RESTAPI。问题是所有的帖子都被退回了 405方法不允许 如果我从应用程序中删除安全启动器,它就会工作。这让我相信安全配置是问题所在。但我不知道怎么做。

  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的

  • 问题内容: 我正在开发flask注册表格,但收到错误消息: 码: registration.html: 当我访问时,我收到错误消息。我究竟做错了什么? 问题答案: 这是因为在定义路由时仅允许POST请求。 当你在浏览器中访问时,它将首先执行GET请求。只有提交表单后,浏览器才会执行POST。因此,对于像你这样的自我提交表单,你需要同时处理两者。 使用 应该管用。

  • 问题内容: 我打算使用Ajax将跨域请求发送到soap Web服务。Web服务的URL是:http://example1.asmx?op = GetVOD 我的代码: 在IIS 7服务器端,我已经将这些行添加到文件web.config中 当我在Chrome上运行客户端代码时,出现405错误: 有谁知道如何解决这个问题? 预先感谢 问题答案: 听起来像Web DAV正在阻碍。这是删除它的配置: ht

  • 从Laravel开始,我在尝试发布到我的一个页面时遇到了一个问题。 我正在使用邮递员创建一个帖子请求到我的 /clock页面。 这篇文章发送了一个简单的Json,只有一个字段: 以下是邮报的标题: 我的路线当前位于路线/api中。php文件夹,并包含以下内容: 它链接到如下所示: 当我在邮递员执行后,这是我得到的错误:

  • 我正在尝试使用angularJs和$http发布一个表单。post方法。但每当我执行此函数时,它都会给我以下错误:加载资源失败:服务器响应状态为405(不允许使用方法),我不知道该怎么办。(Im使用visual studio 2015)

  • 我有一个jquery脚本(从github下载),可以删除实体。下面是脚本。 }); 而我就是这样利用它的 相应的laravel路线如下所示 然而,当我尝试按下X(删除按钮)时,我得到了405方法不允许的错误。错误如下 这在我的本地沙箱上运行良好。 任何帮助都将不胜感激。 谢啦

  • 我试图用jQuery做一个POST请求,但是我得到了一个错误405(不允许使用方法),我正在使用Laravel 5 这是我的代码: jQuery 超文本标记语言 控制器 JQuery错误http://localhost/laravel5.1/public/empresas/eliminar/5405(不允许方法)。 url值为 数据值是 如果我更改为request它工作正常,但我想做一个post请