Функциональный маршрут Spring Web Flux (реактивный) не работает должным образом с Kotlin

Привет, хорошие люди, заинтересованные в написании весенних приложений на Котлине. Я играю со снимком Spring Boot 2.0.0 и spring-webflux. Этот фрагмент кода:

@Component
class TestRouter() : RouterFunction<ServerResponse> {
  override fun route(request: ServerRequest) = route(request) {
    "/".route {
      GET("/hello") { ServerResponse.ok().body(BodyInserters.fromObject("World")) }
      "/{id}".route {
        GET("/hello") { ServerResponse.ok().body(BodyInserters.fromObject("World ${request.pathVariable("id")}")) }
      }
    }
  }
}

не работает так, как ожидалось (по крайней мере, как я ожидал:))

➜  ~ curl -i http://localhost:8080/hello
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: text/plain;charset=UTF-8

World

но:

➜  ~ curl -i http://localhost:8080/1/hello
HTTP/1.1 404 Not Found
content-length: 0

Трассировка рабочего случая:

2017-03-03 00:58:03.865 TRACE 7666 --- [ctor-http-nio-4] o.s.w.r.f.server.RequestPredicates       : Pattern "//**" matches against value "/hello"
2017-03-03 00:58:03.865 DEBUG 7666 --- [ctor-http-nio-4] o.s.w.r.function.server.RouterFunctions  : Nested predicate "//**" matches against "GET /hello"
2017-03-03 00:58:03.865 TRACE 7666 --- [ctor-http-nio-4] o.s.w.r.f.server.RequestPredicates       : Method "GET" matches against value "GET"
2017-03-03 00:58:03.866 TRACE 7666 --- [ctor-http-nio-4] o.s.w.r.f.server.RequestPredicates       : Pattern "/hello" matches against value "/hello"
2017-03-03 00:58:03.866 DEBUG 7666 --- [ctor-http-nio-4] o.s.w.r.function.server.RouterFunctions  : Predicate "(GET && /hello)" matches against "GET /hello"

Трассировка неработающего случая:

2017-03-03 00:59:26.958 TRACE 7666 --- [ctor-http-nio-1] o.s.w.r.f.server.RequestPredicates       : Pattern "//**" matches against value "/1/hello"
2017-03-03 00:59:26.958 DEBUG 7666 --- [ctor-http-nio-1] o.s.w.r.function.server.RouterFunctions  : Nested predicate "//**" matches against "GET /1/hello"
2017-03-03 00:59:26.958 TRACE 7666 --- [ctor-http-nio-1] o.s.w.r.f.server.RequestPredicates       : Method "GET" matches against value "GET"
2017-03-03 00:59:26.958 TRACE 7666 --- [ctor-http-nio-1] o.s.w.r.f.server.RequestPredicates       : Pattern "/hello" does not match against value "/1/hello"
2017-03-03 00:59:26.959 TRACE 7666 --- [ctor-http-nio-1] o.s.w.r.f.server.RequestPredicates       : Pattern "/{id}/**" matches against value "/1/hello"
2017-03-03 00:59:26.959 DEBUG 7666 --- [ctor-http-nio-1] o.s.w.r.function.server.RouterFunctions  : Nested predicate "/{id}/**" matches against "GET /1/hello"
2017-03-03 00:59:26.959 TRACE 7666 --- [ctor-http-nio-1] o.s.w.r.f.server.RequestPredicates       : Method "GET" matches against value "GET"
2017-03-03 00:59:26.959 TRACE 7666 --- [ctor-http-nio-1] o.s.w.r.f.server.RequestPredicates       : Pattern "/hello" does not match against value "/1/hello"

Это похоже на ошибку (поскольку "/{id}".route {...} предположительно использует RouterFunctions.nest), но я могу ошибаться. Ваши мысли и помощь приветствуются.

Я, очевидно, знаю, что могу заставить /1/hello работать, просто написав GET("/{id}/hello") { ... }, но меня интересует вложенный вариант .route { ...}, поскольку он поддерживает мой вариант использования добавления вложенных маршрутов из другого места (например, карты и т. д.).


person Strelok    schedule 02.03.2017    source источник
comment
Не мог бы "/".route { GET ("/hello") ... дать вам маршрут "//hello"? Вы пробовали "/".route { GET ("hello")?   -  person marstran    schedule 02.03.2017
comment
@marstran /hello работает, а вложенный /1/hello не работает   -  person Strelok    schedule 02.03.2017
comment
Похоже на ошибку, создайте проблему на jira.spring.io/browse/SPR .   -  person Sébastien Deleuze    schedule 02.03.2017
comment
Для других, ищущих информацию, возникла ошибка: jira.spring.io/browse/SPR-15310   -  person Strelok    schedule 03.03.2017


Ответы (1)


Эта проблема была исправлена ​​в SPR-15310.

person Community    schedule 16.11.2017