Matching URLs with a trailing slash was deprecated in 6.0 in favor of early handling via proxy or Filter like UrlRewriteFilter, see #28552 for details. The continued feedback on the issue, however, makes it clear we need to go further and provide built-in support.

This can be a Filter ordered as early as possible, e.g. ahead of security, that handles URLs with a trailing slash. One option is a permanent redirect, and another is to rewrite the request like UrlRewriteFilter. This can be configurable by URL pattern or for all requests. Another suggestion from https://github.com/spring-projects/spring-framework/issues/28552#issuecomment-1469740759 is to log URLs with a trailing slash in order to discover and phase them out.

Comment From: thammaratNak1

why does'n support trailing slash by default same as version before ?

Comment From: SebasAnasco1517

Hi, there any news for this Filter built-in solution? On my company we migrated to SpringBoot 3 and found the 404 problem from the deprecation of trailing slash.

Have a good one, God bless you.

Comment From: ericdriggs

@SebasAnasco1517 Workaround is setUseTrailingSlashMatch. I'm using it in several projects

https://github.com/spring-projects/spring-framework/issues/28552#issuecomment-1746252506

Comment From: rstoyanchev

I've added UrlHandlerFilter in edb6bb717d9ea10429a9e5c1fba285cd7761d5a1 that will be in 6.2.0 snapshots shortly, and in the M2 release tomorrow. Early feedback towards further 6.2 milestones would be much appreciated!

There is no WebFlux equivalent yet, but I've created #32830 for M3 to keep track of that.

Comment From: kundan621

@rstoyanchev can you please also tell how to use this? Do you have any documentation or Blog post for this?

Comment From: bclozel

@kundan621 we've added some documentation for this. See https://docs.spring.io/spring-framework/reference/6.2-SNAPSHOT/web/webmvc/filters.html#filters.url-handler

Comment From: SchlauFuchs

Hi, @rstoyanchev,

What if you need to filter into the other direction, as if the user does not have the trailing slash added but the endpoint expects it? In our case we use openapi to generate endpoint interfaces, and the root of our endpoint is "/" and that leads to endpoints defined as with just the trailing slash after the context path. your filter is removing it, but we need to have it added in the filter if the user does not add it.