java - 配置 Jersey 1.x 项目以生成 swagger 文档

标签 java rest jersey yaml swagger

我正在尝试配置我的 Jersey 1.x REST 项目来生成 Swagger 文档。 实际上,REST 工作得很好,但 swagger 却不起作用。 我在 WAS 8.5 上运行该项目,当我使用浏览器访问以下 URL 时:

http://localhost:9082/TestSwagger/swagger.yaml

服务器返回 404 错误。

我发布了项目中包含的库和感兴趣的 java 文件以获取一些帮助:

包含的库:

  • 注释-2.0.1
  • asm-3.1
  • commons-lang-3.2.1
  • Guava -15.0
  • jackson-annotations-2.4.0
  • jackson-core-2.4.2
  • jackson-databind-2.4.2
  • jackson -dataformat-xml-2.4.2
  • jackson -dataformat-yaml-2.4.2
  • jackson 数据类型-joda-2.4.2
  • jackson-jaxrs-json-provider-2.4.2
  • jackson-module-jaxb-annotations-2.4.2
  • javassist-3.18.2-GA
  • jersey-client-1.13
  • Jersey 核心-1.13
  • Jersey -multipart-1.13
  • Jersey 服务器-1.13
  • jersey-servlet-1.13
  • joda-time-2.2
  • jsr311-api-1.1.1
  • mimepull-1.6
  • 反射-0.9.9
  • slf4j-api-1.6.3
  • stax2-api-3.1.4
  • swagger-annotations-1.5.0
  • swagger-core-1.5.0
  • swagger-jaxrs-1.5.0
  • swagger-jersey-jaxrs-1.5.0
  • swagger-models-1.5.0
  • validation-api-1.1.0.Final

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" 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">
<display-name>TestSwagger</display-name>

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>    
    <init-param>
       <param-name>javax.ws.rs.Application</param-name>
       <param-value>it.test.application.TestApplication</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>       
    <init-param>
        <param-name>com.sun.jersey.config.feature.DisableWADL</param-name>
        <param-value>true</param-value>
    </init-param>        
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

javax.ws.rs.core.Application扩展的类:

package it.test.application;

import io.swagger.jaxrs.config.BeanConfig;
import it.test.rest.impl.TestServiceImpl;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

public class TestApplication extends Application {
public TestApplication() {
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0");
    beanConfig.setSchemes(new String[]{"http"});
    beanConfig.setHost("localhost:9082");
    beanConfig.setBasePath("/TestSwagger");
    beanConfig.setResourcePackage("it.test.rest.impl");
    beanConfig.setScan(true);
}

 public Set<Class<?>> getClasses() {
   Set<Class<?>> classes = new HashSet<Class<?>>();

   classes.add(TestServiceImpl.class);

   classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
   classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);

   return classes;
 }
}

TestServiceImpl.java,包含 REST 服务的实现和 swagger 注释:

package it.test.rest.impl;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Contact; 
import io.swagger.annotations.ExternalDocs;
import io.swagger.annotations.Info;
import io.swagger.annotations.License;
import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.Tag;
import it.test.bean.ReturnBean;
import it.test.rest.TestService;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@SwaggerDefinition(
    info = @Info(
            description = "Test",
            version = "1",
            title = "Test",
            termsOfService = "",
            contact = @Contact(
               name = "Test", 
               email = "test@test.it", 
               url = "http://test"
            ),
            license = @License(
               name = "Apache 2.0", 
               url = "http://www.apache.org/licenses/LICENSE-2.0"
            )
    ),
    consumes = {"application/json", "application/xml"},
    produces = {"application/json", "application/xml"},
    schemes = {SwaggerDefinition.Scheme.HTTP},
    tags = {
            @Tag(name = "Private", description = "Tag used to denote operations as private")
    },
    externalDocs = @ExternalDocs(value = "EXT DOC", url = "http://test")
)
@Path("/test/servizi")
public class TestServiceImpl implements TestService {

@Override
@GET
@ApiOperation(value = "Get Hello",
response = TestServiceImpl.class)   
@Path("/hello")
@Produces({MediaType.APPLICATION_JSON})
public ReturnBean getHello() throws Exception {
    ReturnBean returnBean = new ReturnBean();
    returnBean.setRitorno("HELLO");
    return returnBean;
}

}

最佳答案

正如 Paul Samsotha 所建议的,在 URL 中添加 rest 就可以了!

关于java - 配置 Jersey 1.x 项目以生成 swagger 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400573/

相关文章:

java - 总和计算不正确

java - JTextField - 将边框重置为系统默认值

android - 从 Retrofit2 调用 Web 请求时如何解决致命异常?

rest - 基于 token 的身份验证 (TBA) - OAuth - Netsuite - 其余网络服务 - 无效的登录尝试

java - 使用 Jersey 的 Java Web 服务

具有可编程调度程序的 Java 休息框架?

java - 在 Spring Boot 中重定向到不同的主机(非 www 到 www URL)

rest - 在 RESTful 架构中,客户端应该如何请求使用资源的格式?

java - 将 google appengine datastore.key 与 REST 结合使用时出错

java - 如何从java中的相同正则表达式模式获得多个答案