Swagger не показывает / документирует мои конечные точки RESTful (JAX-RS, Spring-boot) - PullRequest
0 голосов
/ 14 января 2019

Я разработал веб-сервис RESTful в Java и Spring boot с использованием Jax-RS, и я хотел бы задокументировать его с помощью Swagger. До сих пор мне удалось отобразить страницу swagger-ui.html на http:8080/localhost/<context>/swagger-ui.html. К сожалению, мои конечные точки RESTful нигде не отображаются .

Что я использую:

pom.xml

 <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>

Класс конфигурации Swagger

@Configuration
@EnableSwagger2
public class SwaggerConfiguration
{
    @Autowired
    private TypeResolver typeResolver;

    @Bean
    public Docket api()
    {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("org.nick.java.webservice.services"))
                .paths(PathSelectors.any())
                .build()
                .enable(true)
                .apiInfo(getApiInfo())
                .tags(
                        new Tag("My web service", "Methods for my RESTful service")
                );
    }

    private ApiInfo getApiInfo() {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("API Documentation")
                .description("API")
                .version("1.0")
                .contact(new Contact("mycompany", "", "nickath@mycompany.com"))
                .build();

        return apiInfo;
    }

пример конечных точек JAX-RS

package org.nick.java.webservice.services;

@Path("/contextsapi")
@Consumes("application/json")
@Produces("application/json")
@Api(value = "Contexts API", produces = "application/json")
public interface ContextAPI {

    @Path("/contexts/contexts")
    @GET
    @ApiOperation( value = "get contexts",
                   response = List.class)
    List<Context> getContexts();

снимок экрана со страницей swagger-ui.html

screenshot

как видите, метод 'get contextxts' не был сгенерирован

Есть идеи, что я делаю не так?

======= ОБНОВЛЕНИЕ - РЕАЛИЗАЦИЯ УСЛУГИ ========

package  org.nick.java.webservice.services.impl;
@Service
@Api(value = "Contexts Api Impl", produces = "application/json", description = "desc")
@Path("/contextsapi")
public class ContextAPIImpl implements ContextAPI {

   @Override
   @GET
   @ApiOperation( value = "get contexts", response = List.class)
   public List<Context> getContexts(){
     //code ommitted
   }
}

Ответы [ 3 ]

0 голосов
/ 16 января 2019

решаемые

Наконец мне удалось решить мою проблему, используя Swagger2Feature, следуя приведенному ниже примеру https://code.massoudafrashteh.com/spring-boot-cxf-jaxrs-hibernate-maven-swagger-ui/

Зависимости Maven

<cxf.version>3.1.15</cxf.version>
<swagger-ui.version>3.9.2</swagger-ui.version>

 <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
        <version>${cxf.version}</version>
    </dependency>

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-service-description-swagger</artifactId>
        <version>${cxf.version}</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson.version}</version>
    </dependency>

    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>swagger-ui</artifactId>
        <version>${swagger-ui.version}</version>
    </dependency>

CxfConfig.java

@Configuration
public class CxfConfig {

@Autowired
private Bus bus;


@Bean
public Server rxServer(){
    final JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
    endpoint.setProvider(new JacksonJsonProvider());
    endpoint.setBus(bus);
    endpoint.setAddress("/swagger");
    endpoint.setServiceBeans(Arrays.<Object>asList(contextAPI());
    Swagger2Feature swagger2Feature = new Swagger2Feature();
    endpoint.setFeatures(Arrays.asList(swagger2Feature));
    return endpoint.create();
}


@Bean
public ContextAPI contextAPI(){
    return new ContextAPIImpl();
}

Теперь документация по чванству доступна на http://localhost:8080///swagger/api-docs?url=//swagger/swagger.json

Чтобы настроить пользовательский интерфейс конечной точки, см. Руководство здесь

0 голосов
/ 17 января 2019

Я бы предложил использовать Swagger 2 Я столкнулся с той же проблемой. проблема с реализованным Docket, правильное регулярное выражение может помочь. Пример:

@Configuration
@EnableSwagger2
public class SwaggerConfig {                                    
@Bean
public Docket api() { 
    return new Docket(DocumentationType.SWAGGER_2)  
      .select()                                  
      .apis(RequestHandlerSelectors.any())              
      .paths(PathSelectors.any())                          
      .build();                                           
}
}

Вы можете обратиться по ссылке выше Настройка Swagger 2 Пример Пример исходного кода также по вышеуказанной ссылке.

0 голосов
/ 14 января 2019

Swagger предположим, что не показывать документацию для любого API client. Он будет генерировать документацию для вашего сервиса, если есть какие-либо с аннотациями чванства.

Чтобы подтвердить это, попробуйте создать Spring @service и добавить аннотации с пометками. Документ будет сгенерирован, если о других аспектах позаботятся. Поскольку вы видите пользовательский интерфейс, я бы предположил, что зависимости правильные.

Идея в том, что ваша задача - документировать ваш сервис, и в этом вам поможет сваггер. Вы не обязаны создавать / публиковать документацию для API, которые использует ваш сервис. Поскольку вы не обслуживаете сервис, также не имеет смысла вести документацию.

Когда я впервые использовал Rest клиент, я тоже немного озадачился этим. Но если вы действительно думаете об этом, это ожидаемо и имеет смысл.

...