Статьи

Spring MVC Endpoint Документация с Spring Boot

Давным-давно я  писал о способе документирования  всех отображений 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