フィルター内のリクエストパス変数を取得する方法は?【Micronaut 1.3.2]

3logy:

通常、春には、我々はしてパス変数を取得できます。

final Map<String, String> pathVariables = (Map<String, String>) request
                 .getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

ここで私はこれまで何をすべきかです。

コントローラ:

@Get(value = "/{variable}/anotherpath")
public Single<HttpResponse<ResponseESQ>> myController(String variable)  {}

フィルタ:

@Filter("/**")
public class myFilter implements HttpServerFilter {
  @Override
  public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) { 
    // I need here to consume the path variable
    request.getAttribute("variable")
  }
}

私が使用しよう:request.getAttributes()それは仕事をしません。

どのように我々はMicronautで同じことを行うことができますか?

saw303:

2つのパス変数が含まれているURIと、次のコントローラを考えるsomethingname

@Controller("/say")
public class SuperController {

  @Get("{something}/to/{name}")
  @Produces
  public String hello(String something, String name) {
    return String.format("%s %s", something, name);
  }
}

あなたはアクセスすることにより、パス変数にアクセスすることができ、フィルタ書くことができますio.micronaut.web.router.UriRouteMatchに含まれていることをio.micronaut.http.HttpMessage#getAttributes

次の例のフィルタは、パス変数にアクセスします。

@Filter("/**")
public class SuperFilter implements HttpFilter {
  @Override
  public Publisher<? extends HttpResponse<?>> doFilter(HttpRequest<?> request, FilterChain chain) {
    Optional<UriRouteMatch> uriRouteMatch = request
        .getAttributes()
        .get(HttpAttributes.ROUTE_MATCH.toString(), UriRouteMatch.class);

    if (uriRouteMatch.isPresent()) {
      // access the path variables.
      Map<String, Object> variableValues = uriRouteMatch.get().getVariableValues();
      System.out.println(variableValues);
    }
    return chain.proceed(request);
  }
}

これは、あなたの質問に答える願っています。幸運とMicronautを楽しんでいます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=300897&siteId=1