How to show all controllers and mappings in a view

2020-01-29 04:03发布

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

1条回答
家丑人穷心不美
2楼-- · 2020-01-29 04:44

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

查看更多
登录 后发表回答