How to show all available routes in Spring?
If you are using Intellij (ultimate edition), then after you build/run the project, you can view the routes in the bottom toolbar Run
-> Endpoints
-> Mappings
.
If you set the Log4J category for log4j.logger.org.springframework.web
to INFO
or DEBUG
you should see the list of mappings in your server's log (e.g. catalina.out
) when your app starts up.
For example:
INFO: DefaultAnnotationHandlerMapping: Mapped URL path [/about] onto handler [org.bozos.songfight.webapp.spring.controller.RootController@6bc947]
INFO: DefaultAnnotationHandlerMapping: Mapped URL path [/about.*] onto handler [org.bozos.songfight.webapp.spring.controller.RootController@6bc947]
INFO: DefaultAnnotationHandlerMapping: Mapped URL path [/about/] onto handler [org.bozos.songfight.webapp.spring.controller.RootController@6bc947]
...
INFO: SimpleUrlHandlerMapping: Mapped URL path [/login] onto handler [org.springframework.web.servlet.mvc.UrlFilenameViewController@4035acf6]
Solution
This can be done with spring-boot-starter-web:2.6.5 which makes use of spring-webmvc:5.3.17.
Add this config to your application.yml (or similar):
logging:
level:
_org.springframework.web.servlet.HandlerMapping.Mappings: debug
The underscore '_' in the logger name is important.
This property will generate logs during application boot that look like this
How it works
The property references spring-webmvc:5.3.17's org.springframework.web.servlet.handler.AbstractHandlerMapping which creates a hidden logger for mappings
This logger gets used in method detectHandlerMethods() of subclass AbstractHandlerMethodMapping
It looks like this technique goes back as early as spring-webmvc 5.3.5 (march 2021):
Github Spring Framework Release 5.3.5
Here's the commit containing the changes:
Github Spring Framework commit with changes for logging routes