2012-03-19 31 views
15

Tôi không có dự án Spring MVC chuẩn nào. Đáp ứng với XML. Có thể tạo một khung nhìn (trang jsp) hiển thị tất cả các bộ điều khiển, ánh xạ và tham số được chấp nhận (bắt buộc và không).Cách hiển thị tất cả các bộ điều khiển và ánh xạ trong một khung nhìn

Dựa trên câu trả lời, tôi có:

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

tôi không nhận được bất kỳ thông tin từ @RequestParam

Trả lời

26

Với RequestMappingHandlerMapping trong mùa xuân 3.1, bạn có thể dễ dàng duyệt qua các thiết bị đầu cuối.

Bộ điều khiển:

@Autowire 
private RequestMappingHandlerMapping requestMappingHandlerMapping; 

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

Quan điểm:

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

Bạn cũng có thể làm điều này với mùa xuân < 3.1, với DefaultAnnotationHandlerMapping thay vì RequestMappingHandlerMapping. Nhưng bạn sẽ không có cùng một mức độ thông tin.

Với DefaultAnnotationHandlerMapping bạn sẽ chỉ có con đường điểm cuối, không có thông tin về các phương pháp của họ, tiêu thụ, params ...

+0

Nó được tốt đẹp, tuy nhiên, tôi không nhận được tất cả thông tin.

 \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 đang hoạt động, nhưng tất cả những thứ khác không hoạt động. – mamruoc

+0

Tôi đã viết mã này để sử dụng của riêng tôi và nó hoạt động tốt. Điều này không phải vì '$ {endPoint.methodsCondition}' hiển thị không có gì nó không hoạt động. Đó là vì bạn không có bất kỳ điều kiện phương pháp nào cho endPoint. Hơn nữa, thông tin 'RequestMappingHandlerMapping' chỉ dựa trên nội dung chú thích' @ RequestMapping'. Nếu bạn muốn xem tham số 'id', bạn phải có một điều kiện tham số, như sau:' @RequestParam (value = "/ get", params = {"id"}) ' – tbruyelle

Các vấn đề liên quan