How to show all controllers and mappings in a view
With RequestMappingHandlerMapping
in Spring 3.1, you can easily browse the endpoints.
The controller :
@Autowireprivate RequestMappingHandlerMapping requestMappingHandlerMapping;@RequestMapping( value = "endPoints", method = RequestMethod.GET )public String getEndPointsInView( Model model ){ model.addAttribute( "endPoints", requestMappingHandlerMapping.getHandlerMethods().keySet() ); return "admin/endPoints";}
The view :
<%@ page session="false" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>Endpoint list</title></head><body><table> <thead> <tr> <th>path</th> <th>methods</th> <th>consumes</th> <th>produces</th> <th>params</th> <th>headers</th> <th>custom</th> </tr> </thead> <tbody> <c:forEach items="${endPoints}" var="endPoint"> <tr> <td>${endPoint.patternsCondition}</td> <td>${endPoint.methodsCondition}</td> <td>${endPoint.consumesCondition}</td> <td>${endPoint.producesCondition}</td> <td>${endPoint.paramsCondition}</td> <td>${endPoint.headersCondition}</td> <td>${empty endPoint.customCondition ? "none" : endPoint.customCondition}</td> </tr> </c:forEach> </tbody></table></body></html>
You can also do this with Spring < 3.1, with DefaultAnnotationHandlerMapping
instead of RequestMappingHandlerMapping
. But you won't have the same level of information.
With DefaultAnnotationHandlerMapping
you will only have the endpoints path, without information about their methods, consumes, params...