在Ratpack中使用`prefix {}`方法而不是`all {byMethod {}}}会导致405 Method Not Allowed-怎么了?

时间:2019-03-31 16:30:53

标签: groovy ratpack

我刚刚开始阅读“ Learn Ratpack”,在本书开头的一个示例中,作者使用“ all”,“ byMethod”,“ get”和“ post”来举例说明如何解析请求数据,他的工作方式,但我尝试使用“前缀”,“获取”和“发布”,但无法获得相同的结果,它返回405-Method Not Allowed。

我试图在文档中找到某些内容,但是我看不出为什么带有'prefix'的行为。

示例版本

import static ratpack.groovy.Groovy.ratpack
import ratpack.form.Form

ratpack {
    handlers {
        all {
            byMethod {
                get {
                  //In the exemple he sends a html form
                }
                post {
                  //And here he parses it.
                }
            }
        }
    }
}

405版本

import static ratpack.groovy.Groovy.ratpack
import ratpack.form.Form

ratpack {
    handlers {
        prefix("parsing-request-data") {
            get{
               //From here all the same

就是这样,我想念什么?

1 个答案:

答案 0 :(得分:1)

如果要对同一相对路径使用多个不同的HTTP方法,则仍需要使用For rowFldNo = 1 To pvt.RowFields.Count For colFldNo = 1 To pvt.ColumnFields.Count For rowItemNo = 1 To pvt.RowFields(rowFldNo).DataRange.Rows.Count For colItemNo = 1 To pvt.ColumnFields(colFldNo).DataRange.Columns.Count showstring = showstring & ... Next colItemNo Next rowItemNo Next colFldNo Next rowFldNo 方法创建此类处理程序。否则,链中与相对路径匹配的第一个处理程序将处理该请求,并且该请求可能失败或成功。 (在您的情况下,POST请求失败,并出现 405方法不允许,因为byMethod {}处理程序处理了请求,并在请求中找到了错误的HTTP方法。如果您想查看GET请求失败,而不是POST一个-重新排序方法,因此get是链中的第一个处理程序。)

post {}方法允许为同一相对路径注册多个处理程序,这些处理程序将根据请求的HTTP方法进行解析。如果使用byMethod {}方法,则可以在prefix {}帮助方法中访问byMethod {}方法:

path {}

和一些curl命令对其进行测试:

import static ratpack.groovy.Groovy.ratpack

ratpack {

    handlers {

        prefix("parsing-request-data") {
            path {
                byMethod {
                    post {
                        response.send("A response returned from POST /parsing-request-data\n ")
                    }

                    get {
                        response.send("A response returned from GET /parsing-request-data\n")
                    }
                }
            }

            get("test") {
                response.send("A response returned from GET /parsing-request-data/test\n")
            }
        }
    }
}