Несколько методов HTTP отображаются для маршрута работоспособности spring fox в swagger

Я использую здоровье привода весенней загрузки с весенним чванством лисы в проекте весенней загрузки. Я использую ниже в своем классе Application.java.

@Autowired
private HealthAggregator healthAggregator;

@Autowired
private Map<String, HealthIndicator> healthIndicators;

@Bean
public com.health.TestMeHealthEndpoint getHealthEndpoint() {
    return new com.health.TestMeHealthEndpoint(healthAggregator, healthIndicators);
}

@Bean
public Docket testMeApi() {
    return new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false).apiInfo(apiInfo()).select()
            .paths(testMePaths()).build();
}

private Predicate<String> testMePaths() {
    return or(regex("/api/myservice1"), regex("/health"));
}

Но когда я проверяю пользовательский интерфейс swagger, я вижу несколько конечных точек работоспособности со всеми типами методов http, включая POST, DELETE, OPTIONS и т. д. Для myservice1, который реализуется в контроллере REST, он отображает только метод GET.

TestMeHealthEndpoint расширяет AbstractEndpoint и переопределяет метод вызова с пользовательской информацией о работоспособности.

Я только хочу увидеть, является ли метод GET для маршрута здоровья?

Добавьте источник TestMeHealthEndpoint:

@ConfigurationProperties(prefix = "endpoints.health", ignoreUnknownFields = true)
public class TestMeHealthEndpoint  extends AbstractEndpoint<Health> {

  //Some getter and setters for api name , version etc

  public TestMeHealthEndpoint (final HealthAggregator healthAggregator,
            final Map<String, HealthIndicator> healthIndicators) {
        super("health", false);
        final CompositeHealthIndicator healthIndicator = new CompositeHealthIndicator(healthAggregator);
        for (final Map.Entry<String, HealthIndicator> entry : healthIndicators.entrySet()) {
            healthIndicator.addHealthIndicator(getKey(entry.getKey()), entry.getValue());
        }
        this.healthIndicator = healthIndicator;
    }

  @Override
    public Health invoke() {
        final Health health = new Health();
        health.setStatus(this.healthIndicator.health().getStatus().getCode());
        health.setName(this.apiName);
        health.setVersion(this.apiVersion);
        final UriComponentsBuilder path = ServletUriComponentsBuilder.fromCurrentServletMapping()
                .path(this.managementContextPath).pathSegment(this.getId());
        health.add(new Link(path.build().toUriString()).withSelfRel());
        return health;
    }
}

person Harshana    schedule 06.08.2016    source источник
comment
Пожалуйста, покажите исходный код TestMeHealthEndpoint   -  person shazin    schedule 08.08.2016
comment
@shazin Пожалуйста, исправьте вопрос редактирования   -  person Harshana    schedule 08.08.2016
comment
что это за AbstractEndpoint? Какой фреймворк вы используете?   -  person shazin    schedule 08.08.2016
comment
привод пружинного башмака   -  person Harshana    schedule 08.08.2016


Ответы (2)


Я хотел бы предложить вам небольшой обходной путь. Чтобы создать контроллер отдыха, который будет делегировать запросы конечной точке работоспособности. Что-то вроде этого:

@RestController
public class HealthController {

    @Autowired
    TestMeHealthEndpoint testMeHealthEndpoint;

    @ApiOperation(value="Health endpoint", notes = "Health endpoint")
    @RequestMapping(value = "/health", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiResponses(value = {@ApiResponse(code = 200, message = "OK")})
    public ResponseEntity<Health> invoke() {
        return ResponseEntity.ok(testMeHealthEndpoint.invoke());
    }
}

Таким образом, вы также можете использовать следующую директиву для чванства:

.select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
person Konstantin Konyshev    schedule 08.08.2016

Swagger предполагает, что если метод @RequestMapping не установлен, подойдет любой метод. Добавьте method = RequestMethod.GET к своим RequestMapping брекетам ().

Если вы добавите @Bean типа Endpoint, то он будет автоматически открыт через JMX и HTTP (при наличии доступного сервера). Конечные точки HTTP можно дополнительно настроить, создав bean-компонент типа MvcEndpoint. Ваш MvcEndpoint не является @Controller, но может использовать @RequestMapping (и @Managed*) для предоставления ресурсов.

http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

person xenteros    schedule 08.08.2016
comment
TestMeHealthEndpoint не знает RestController. так и не могу добавить - person Harshana; 08.08.2016
comment
ЕСЛИ я просто использую маршрут работоспособности пружинного привода по умолчанию только с зависимостью от pom, он показывает только UP при попадании в конечную точку /health. Но мне нужно добавить дополнительные данные, такие как имя API, версия, чтобы мне пришлось реализовать TestMeHealthEndpoint - person Harshana; 08.08.2016