【问题标题】:Is there a way to unlock all http methods without changing the war file?有没有办法在不更改war文件的情况下解锁所有http方法?
【发布时间】:2017-12-12 06:34:15
【问题描述】:

我在 Jetty 中部署了一个 .war 文件(我没有构建它,因此无法创建新实例)。

http://example.com/rest/object/{uuid}的OPTIONS 请求以HEAD, DELETE, GET, OPTIONS 响应。发动战争的人声称这不是他们档案的问题。

是否可以更改 Jetty 配置文件以允许所有 http 方法?

如果这是我必须在 Jetty Java 文件中做的事情,我是 Jetty 菜鸟,所以请详细一点,或者指出一些我可以阅读的文档。

注意:我可以通过 CURL POST,但不能通过 http...

编辑:(我使用 CURL 发布到不同的端点)

【问题讨论】:

    标签: jetty


    【解决方案1】:

    这不是对我发布的问题的回答,但它让我了解正在发生的事情,这导致该问题与我的特定问题无关。话虽如此,如果它是可回答的,我不会将其标记为答案(我不认为它是,你会在一分钟内看到为什么)。

    简短的回答是我试图 POST 到期望对象已经存在的端点:

    http://example.com/rest/object/{uuid}
    

    我应该做的是使用一个端点,如果你 POST,它知道你想创建一个新对象:

    http://example.com/rest/object
    

    更长的答案

    假设您有一个 REST 端点,可让您获取特定对象,如下所示:

    http://example.com/rest/object/{uuid}
    

    由于您正在处理特定对象,因此您通常不希望在此处发布新对象。 POST 的意思是“创建一个新对象”。如果你能够在那里发布,你基本上会覆盖那个对象......这就是PUT 的用途,but it's debatable。此外,PUT 也不是一个选项...

    因此,由于其主观性,某些Web Services 限制请求方法,因此您必须按照架构师的意图进行操作。我正在运行的 REST 服务器没有太多的文档,所以我不知道这些限制,仍然对此感到困惑。

    我以为我在说“好的,我想用这个 id 创建一个对象。所以如果我将我的数据发布到那个特定的 UUID,服务器就会知道我想创建一个新对象。”我应该说的是“好的,我想创建一个新对象。它的 UUID 已经在数据中定义,所以我需要做的就是将它发送到处理这些对象的端点,并期待一个 POST。”像这样:

    http://example.com/rest/object
    

    【讨论】:

    • servlet 规范也有一个非常具体的行为。查看javax.servlet.http.HttpServlet 的源代码及其doOptions() 方法。这是默认实现。特定的 servlet 可以覆盖 doOptions() 行为以执行自己的行为(就像您的 REST 库可能正在做的那样)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    相关资源
    最近更新 更多