Давным-давно я писал о способе документирования всех отображений uri, предоставляемых типичным приложением на основе Spring MVC. Шаги для этого, однако, очень многословны и требуют довольно глубокого знания некоторых базовых компонентов Spring MVC.
Spring Boot упрощает этот вид документации. Все, что вам нужно сделать для приложения на основе Spring-boot, это активировать исполнительный механизм Spring-boot . Добавление в привод добавляет гораздо больше готовых к работе функций в приложение Spring-boot, однако я сосредоточен именно на отображениях конечных точек.
Итак, сначала добавим привод в качестве зависимости к приложению Spring-boot:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
и если приложение Spring-Boot запущено сейчас, должна быть доступна конечная точка REST по этому адресу http: // machinename: 8080 / mappings, в которой перечислены все URI, предоставляемые приложением, фрагмент этой информации выглядит следующим образом в примере приложения у меня есть:
{ "/**/favicon.ico" : { "bean" : "faviconHandlerMapping" }, "/hotels/partialsEdit" : { "bean" : "viewControllerHandlerMapping" }, "/hotels/partialsCreate" : { "bean" : "viewControllerHandlerMapping" }, "/hotels/partialsList" : { "bean" : "viewControllerHandlerMapping" }, "/**" : { "bean" : "resourceHandlerMapping" }, "/webjars/**" : { "bean" : "resourceHandlerMapping" }, "{[/hotels],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public java.lang.String mvctest.web.HotelController.list(org.springframework.ui.Model)" }, "{[/rest/hotels/{id}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public mvctest.domain.Hotel mvctest.web.RestHotelController.get(long)" }, "{[/rest/hotels],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public java.util.List<mvctest.domain.Hotel> mvctest.web.RestHotelController.list()" }, "{[/rest/hotels/{id}],methods=[DELETE],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public org.springframework.http.ResponseEntity<java.lang.Boolean> mvctest.web.RestHotelController.delete(long)" }, "{[/rest/hotels],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public mvctest.domain.Hotel mvctest.web.RestHotelController.create(mvctest.domain.Hotel)" }, "{[/rest/hotels/{id}],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public mvctest.domain.Hotel mvctest.web.RestHotelController.update(long,mvctest.domain.Hotel)" }, "{[/],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public java.lang.String mvctest.web.RootController.onRootAccess()" }, "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" : { "bean" : "requestMappingHandlerMapping", "method" : "public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)" }, ....
Обратите внимание, что по умолчанию json не отформатирован, чтобы получить отформатированный json, просто убедитесь, что в вашем файле application.properties есть следующая запись:
http.mappers.json-pretty-print=true
Этот список гораздо более полный, чем тот, который у меня изначально был.
Эта же информация, конечно, может быть представлена в лучшем виде путем ее рендеринга в html, и я решил использовать angularjs для представления этой информации. Ниже приводится фабрика сервисов angularjs для извлечения отображений и контроллер, который использует эту фабрику для Заполните модель отображений:
app.factory("mappingsFactory", function($http) { var factory = {}; factory.getMappings = function() { return $http.get(URLS.mappingsUrl); } return factory; }); app.controller("MappingsCtrl", function($scope, $state, mappingsFactory) { function init() { mappingsFactory.getMappings().success(function(data) { $scope.mappings = data; }); } init(); });
Возвращенная модель отображений — это, по сути, карта карты, ключом которой является путь uri, предоставляемый приложением Spring-Boot, а значениями — имя компонента, обрабатывающего конечную точку, и, если доступно, подробности контроллера, обрабатывающего вызов. это можно сделать с помощью шаблона следующей формы:
<table class="table table-bordered table-striped"> <thead> <tr> <th width="50%">Path</th> <th width="10%">Bean</th> <th width="40%">Method</th> </tr> </thead> <tbody> <tr ng-repeat="(k, v) in mappings"> <td>{{k}}</td> <td>{{v.bean}}</td> <td>{{v.method}}</td> </tr> </tbody> </table>
окончательное визуализированное представление отображений конечной точки отображается следующим образом:
Вот пример проекта github с реализованным рендерингом: https://github.com/bijukunjummen/spring-boot-mvc-test