繁体   English   中英

你如何在 spring boot 3 中忽略 webflux 中的尾部斜杠?

[英]How do you ignore trailing slash in webflux in spring boot 3?

在 Spring Boot 3 中,它们已更改,因此默认情况下不再忽略尾部斜杠。 例如,如果我有一个 GET 资源/users ,我导航到/users/那么 Spring Boot webflux 现在将响应 404。

您可以通过实施WebFluxConfigurer并覆盖configurePathMatching方法来更改此设置:

@Override
public void configurePathMatching(PathMatchConfigurer configurer) {
     configurer.setUseTrailingSlashMatch();
}

但是, setUseTrailingSlashMatch已被弃用,文档说改为使用PathPatternParser.setMatchOptionalTrailingSeparator(boolean) 但是,我不明白你如何/在哪里实际配置它。

所以问题是,如何设置PathPatternParser.setMatchOptionalTrailingSeparator(boolean)

正如@joe-clay 在他的评论中提到的, PathPatternParser.setMatchOptionalTrailingSeparator(boolean)也已弃用,支持显式重定向。 所以你有3个选择:

  1. 在控制器处理程序@GetMapping("/users", "/users/")中显式声明这两个路由。 缺点是您需要为每个控制器执行此操作,但可以用作权宜之计。

  2. 实现org.springframework.web.server.WebFilter接口以显式重定向到所需的 url。 沿着这些线的东西:

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

    URI originalUri = exchange.getRequest().getURI();

    if (/* check condition for trailing slash using originalUri getPath(), getQuery() etc. */) {
        String originalPath = originalUri.getPath();
        String newPath = originalPath.substring(0, originalPath.length() - 1); // ignore trailing slash
        try {
            URI newUri = new URI(originalUri.getScheme(),
                    originalUri.getUserInfo(),
                    originalUri.getHost(),
                    originalUri.getPort(),
                    newPath,
                    originalUri.getQuery(),
                    originalUri.getFragment());

            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);    // optional
            response.getHeaders().setLocation(mutatedUri);

            return Mono.empty();

        } catch (URISyntaxException e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }
    return chain.filter(exchange);
}
  1. 显式重写代理中的传入 url(例如使用 nginx 中的rewrite规则)以匹配预期的 url。

在选项 2 和 3 中,您也可以选择返回HTTP 301响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM