I have a none standard Spring MVC project. Responding with XMLs. Is it possible to create a view (jsp page) showing all controllers, mappings and parameters that are accepted (required and not).
Based on answer,I have:
@RequestMapping(value= "/endpoints", params="secure", method = RequestMethod.GET)
public @ResponseBody
String getEndPointsInView() {
String result = "";
for (RequestMappingInfo element : requestMappingHandlerMapping.getHandlerMethods().keySet()) {
result += "<p>" + element.getPatternsCondition() + "<br>";
result += element.getMethodsCondition() + "<br>";
result += element.getParamsCondition() + "<br>";
result += element.getConsumesCondition() + "<br>";
}
return result;
}
I don't get any information from @RequestParam
In a Spring Boot application, we expose a REST API endpoint by using the @RequestMapping annotation in the controller class. For getting these endpoints, there are three options: an event listener, Spring Boot Actuator, or the Swagger library.
You cannot. A URL can only be mapped to a single controller. It has to be unique.
When configuring Spring MVC, you need to specify the mappings between the requests and handler methods. To configure the mapping of web requests, we use the @RequestMapping annotation. The @RequestMapping annotation can be applied to class-level and/or method-level in a controller.
With RequestMappingHandlerMapping
in Spring 3.1, you can easily browse the endpoints.
The controller :
@Autowire
private 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...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With