Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show all controllers and mappings in a view

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

like image 715
mamruoc Avatar asked Mar 19 '12 08:03

mamruoc


People also ask

How do I get all endpoints after startup spring boot?

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.

Can two controllers have same request mapping?

You cannot. A URL can only be mapped to a single controller. It has to be unique.

How do I map a controller in spring boot?

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.


1 Answers

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...

like image 183
tbruyelle Avatar answered Sep 17 '22 14:09

tbruyelle