REST API сваггер джерси не работает

1

Я последовал за шагом, чтобы добавить Swagger в мой уже построенный проект API REST API в TOMCAT

  1. Добавлено:
swagger-annotations-1.3.10.jar
swagger-core_2.10-1.3.10.jar
swagger-jaxrs_2.10-1.3.10.jar
swagger-jersey2-jaxrs_2.10-1.3.10.jar
  1. Добавлено в web.xml

    contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation com.estartup.config.PersistenceConfig

    <!-- Bootstrap the root application context as usual using ContextLoaderListener -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    
    <servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.estartup.config.Application</param-value>
        </init-param>
    
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>Jersey2Config</servlet-name>
        <servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
        <init-param>
            <param-name>api.version</param-name>
            <param-value>1.0.0</param-value>
        </init-param>
        <init-param>
            <param-name>swagger.api.basepath</param-name>
            <param-value>http://localhost:8080/api</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    

Класс приложения:

public class Application extends ResourceConfig {

    @Inject
    public Application(ServiceLocator serviceLocator) {
        register(new ServiceBinder());
        register(com.estartup.feature.JacksonFeature.class);            
        packages(true, "com.estartup", "com.wordnik.swagger.jaxrs.json","com.wordnik.swagger.jersey.listing");

    }

}

Однако, когда я перехожу к

http://localhost:8080/api/api-docs Я получаю HTTP Status 404 - page not found.

:( В журналах я вижу, что чванство загружается вот так: что не так?

15935 DEBUG [localhost-startStop-1] com.wordnik.swagger.jaxrs.config.WebXMLReader - set api.version to 1.0.0
15935 DEBUG [localhost-startStop-1] com.wordnik.swagger.jaxrs.config.WebXMLReader - set swagger.api.basepath to http://localhost:8080/api
  • 0
    Это развертывается с Jetty или другим сервером приложений?
  • 0
    Спасибо я использую tomcat
Теги:
swagger
swagger-ui
jersey

2 ответа

1
Лучший ответ

На основе вашего комментария, если ваше приложение развернуто на Tomcat, это скорее всего неправильный URL.

Скажем, корень контекста вашего приложения - myapp, тогда ваш API будет развернут, доступный по http://localhost:8080/myapp/api/... и таким же образом документы с чаргом будут доступны по http://localhost:8080/myapp/api/api-docs.

3

Попробуйте эту конфигурацию:

pom.xml:

...
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jersey2-jaxrs</artifactId>
    <version>1.5.0</version>
</dependency>
...

web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>ProjectName</display-name>

    <servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>your.package.name.YourApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/rs/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>SwaggerBootstrap</servlet-name>
        <servlet-class>your.package.name.SwaggerApplication</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

</web-app>

SwaggerApplication.java:

public class SwaggerApplication extends HttpServlet {

    private static final long serialVersionUID = -6039834823506457822L;

    @Override
    public void init(ServletConfig config) throws ServletException {

        super.init(config);

        BeanConfig beanConfig = new BeanConfig();

        final String contextPath = config.getServletContext().getContextPath();
        final StringBuilder sbBasePath = new StringBuilder(); 
        sbBasePath.append(contextPath);
        sbBasePath.append("/rs");
        beanConfig.setBasePath(sbBasePath.toString());

        // API Info
        beanConfig.setVersion("0.1");
        beanConfig.setTitle("My Swagger APP");
        beanConfig.setResourcePackage("your.package.name");
        beanConfig.setScan(true);
    }
}

Чтобы получить доступ к вашему Swagger JSON: http://<your-app>/<your-context>/rs/swagger.json

Ещё вопросы

Сообщество Overcoder
Наверх
Меню