Использование метода `prefix {}` вместо `all {byMethod {}}` в Ratpack вызывает метод 405 Not Allowed - что не так? - PullRequest
1 голос
/ 31 марта 2019

Я только начал читать «Learn Ratpack», в одном из примеров с самого начала книги автор использует «all», «byMethod», «get» и «post», чтобы показать, как анализировать запрашивать данные, как он это делает, но я пытался использовать 'prefix', 'get' и 'post', но я не могу получить тот же результат, он возвращает метод 405 Not Allowed.

Я пытался найти что-то в документах, но я не мог понять, почему поведение с префиксом.

Пример версии

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 Ответ

1 голос
/ 31 марта 2019

Если вы хотите использовать несколько разных методов HTTP для одного и того же относительного пути, вам все равно нужно создать такие обработчики, используя метод byMethod {}.В противном случае первый обработчик в цепочке, который соответствует относительному пути, обрабатывает запрос, и он может завершиться неудачно или успешно. (В вашем случае POST-запрос завершается неудачно с 405 Method Not Allowed , потому что обработчик get обрабатывает запрос и находит в запросе неправильный HTTP-метод. Если вы хотите увидеть запрос GETпотерпеть неудачу вместо методов POST one - reorder, поэтому post {} является первым обработчиком в цепочке.)

Этот метод byMethod {} позволяет зарегистрировать несколько обработчиков для одного и того же относительного пути, иэти обработчики будут разрешены на основе метода HTTP запроса.В случае использования метода prefix {} вы можете получить доступ к методу byMethod {} во вспомогательном методе path {}:

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")
            }
        }
    }
}

и нескольким командам curl для его проверки:

$ curl -i -X GET http://localhost:5050/parsing-request-data    
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
content-length: 51

A response returned from GET /parsing-request-data

$ curl -i -X POST http://localhost:5050/parsing-request-data    
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
content-length: 53

A response returned from POST /parsing-request-data

$ curl -i -X GET http://localhost:5050/parsing-request-data/test
HTTP/1.1 200 OK
content-type: text/plain;charset=UTF-8
content-length: 56

A response returned from GET /parsing-request-data/test

...