Вы видите HTTP/1.1 405 Method Not Allowed
статус ответа, потому что ваш запрос обрабатывается обработчиком get("product/:id")
.Если вы хотите использовать один и тот же путь для нескольких методов HTTP, вы можете использовать prefix
в сочетании с методом byMethod
для определения нескольких обработчиков для одного и того же пути.
Рассмотрим следующий пример:
import ratpack.http.MutableHeaders
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
all {
MutableHeaders headers = response.headers
headers.set("Access-Control-Allow-Origin", "*")
headers.set("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE")
next()
}
prefix("product") {
post {
render("POST /product")
}
prefix(":id") {
path {
byMethod {
get {
render("GET /product/${allPathTokens.id}")
}
delete {
render("DELETE /product/${allPathTokens.id}")
}
}
}
}
}
}
}
Как видно из приведенного выше примера, вы можете вкладывать префиксы.Мы можем проверить это с помощью следующих запросов curl:
$ curl -X POST http://localhost:5050/product
POST /product%
$ curl -X GET http://localhost:5050/product/test
GET /product/test%
$ curl -X DELETE http://localhost:5050/product/test
DELETE /product/test%
Если вас интересует более подробная информация, я написал сообщение в блоге некоторое время назад с похожим примером - https://e.printstacktrace.blog/using-the-same-prefix-with-different-http-methods-in-ratpack/