2012-03-19 13 views
15

Tengo un proyecto Spring MVC no estándar. Respondiendo con XMLs. ¿Es posible crear una vista (página jsp) que muestre todos los controladores, asignaciones y parámetros aceptados (obligatorios y no)?Cómo mostrar todos los controladores y las asignaciones en una vista

Basado en respuesta, me tienen:

@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; 
} 

que no reciben ninguna información de @RequestParam

Respuesta

26

Con RequestMappingHandlerMapping en la primavera de 3,1, se puede navegar fácilmente a los puntos finales.

El controlador:

@Autowire 
private RequestMappingHandlerMapping requestMappingHandlerMapping; 

@RequestMapping(value = "endPoints", method = RequestMethod.GET) 
public String getEndPointsInView(Model model) 
{ 
    model.addAttribute("endPoints", requestMappingHandlerMapping.getHandlerMethods().keySet()); 
    return "admin/endPoints"; 
} 

La vista:

<%@ 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> 

También puede hacer esto con la primavera < 3.1, con DefaultAnnotationHandlerMapping en lugar de RequestMappingHandlerMapping. Pero no tendrás el mismo nivel de información.

Con DefaultAnnotationHandlerMapping que sólo tendrá el camino criterios de valoración, sin información sobre sus métodos, consume, params ...

+0

Está bien, sin embargo, no consigo toda la información.

 \t @RequestMapping("/get") \t public @ResponseBody \t String getUsername( \t \t \t @RequestParam(value = "id", required = true) int id) { \t \t \t \t return "test"; \t }
mamruoc

+0

getPatternsCondition funciona, pero el resto no funciona. – mamruoc

+0

Escribí este código para mi propio uso y funciona bien. Esto no es porque '$ {endPoint.methodsCondition}' no muestra nada, no funciona. Es solo porque no tiene ninguna condición de método para endPoint. Además, las informaciones 'RequestMappingHandlerMapping' se basan solo en el contenido de la anotación' @ RequestMapping'. Si quiere ver el parámetro 'id', debe tener una condición de parámetro, algo así:' @RequestParam (value = "/ get", params = {"id"}) ' – tbruyelle

Cuestiones relacionadas