Задать вопрос
Alexiuscrow
@Alexiuscrow

Почему не получается сгенерить json c api моего сервиса через swagger?

У меня есть RESTful сервис, который основывается на Jersey 1.18.1 и я хочу отображать мой API через Swagger.
Для начала я должен получить JSON. Swagger позволяет настраивать конфигурацию несколькими способами и я решил использовать для конфигурации субкласс класса Application. В результате мне не удалось получить JSON, который затем я бы мог использовать для swagger-ui.
Субкласс класса "Application"
@ApplicationPath("api/v1")
public class DiscountsApp extends Application{

public DiscountsApp() {
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[]{"http"});
    beanConfig.setHost("localhost:8002");
    beanConfig.setBasePath("swaggerapi");
    beanConfig.setResourcePackage("alexiuscrow.diploma.endpoints");
    beanConfig.setScan(true);
}

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new HashSet();
    resources.add(ShopsResources.class);
    //...       
    resources.add(com.wordnik.swagger.jaxrs.listing.ApiListingResource.class);
    resources.add(com.wordnik.swagger.jaxrs.listing.SwaggerSerializers.class);
    return resources;
}
}

ShopsResources
@Path("/shops")
@Api(value="/shops", description="Shops")
public class ShopsResources {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "List shops", httpMethod = "GET", 
        notes = "List nearest or locality shops",
        response = Shops.class, responseContainer = "List")
    public String getShops(
            @ApiParam( value = "Radius", required = false)
            @QueryParam("radius") String radiusParam, 
            @ApiParam( value = "Latitude", required = true)
            @QueryParam("lat") String latParam,
            @ApiParam( value = "Longitude", required = true)
            @QueryParam("lng") String lngParam) throws SQLException{
                //The list of Shops objects is serialized to string 
                //using the custom GSON serializer and I know
                //that there is the better method of the solution of this task.
            }
    }
}

Некоторые зависимости из файла pom.xml
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.18.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.18.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.18.1</version>
</dependency>
<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-jersey-jaxrs</artifactId>
    <version>1.5.1-M2</version>
</dependency>

После того как задеплоил приложение на Tomcat я попытался перейти по localhost:8002/swaggerapi но не получил желаемого результата. Я не нашёл swagger.json в корне приложения (/tomcat8/webapps/app).
В чём может быть проблема?
Как я могу получить JSON c API моего приложения?
Документация: Swagger Core Jersey 1.X Project Setup 1.5.
  • Вопрос задан
  • 1659 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@bromzh
Drugs-driven development
UPD2
Да, точно, про конструктор не заметил, извини.
Я создал простой проект, у меня получилось всё. Адрес API самого свагера такого вида:
<Хост томката>/<Путь до приложения, т.е. ApplicationContext>/<Значение @ApplicationPath или то, что в web.xml>/swagger.json

Для меня это localhost:8080/api/swagger.json
У тебя будет наверное localhost:8080/api/v1/swagger.json

Демо проект на гитхабе.

PS для использования swagger-ui ещё надо в томкате CORS настроить. Добавь это
<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

в глобальный web.xml (%TOMCAT_HOME%/conf/web.xml).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы