Учитывая следующий контроллер с URI, который содержит две переменные пути something
и name
.
@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.