配置 Jersey 1.x 项目以生成 swagger 文档
Configure Jersey 1.x project to produce swagger documentation
我正在尝试配置我的 Jersey 1.x REST 项目以生成 Swagger 文档。
实际上 REST 工作得很好,但 swagge 不起作用。
我是 运行 WAS 8.5 上的项目,当我在 URL:
使用浏览器时
http://localhost:9082/TestSwagger/swagger.yaml
服务器 returns 404 错误。
我 post 项目中包含的库和感兴趣的 java 文件寻求帮助:
包含的库:
- annotations-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-datatype-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-core-1.13
- 球衣-multipart-1.13
- jersey-server-1.13
- 球衣-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
- 招摇-jaxrs-1.5.0
- 招摇球衣-jaxrs-1.5.0
- swagger-models-1.5.0
- 验证-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>
Class 从 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
就可以了!
我正在尝试配置我的 Jersey 1.x REST 项目以生成 Swagger 文档。 实际上 REST 工作得很好,但 swagge 不起作用。 我是 运行 WAS 8.5 上的项目,当我在 URL:
使用浏览器时http://localhost:9082/TestSwagger/swagger.yaml
服务器 returns 404 错误。
我 post 项目中包含的库和感兴趣的 java 文件寻求帮助:
包含的库:
- annotations-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-datatype-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-core-1.13
- 球衣-multipart-1.13
- jersey-server-1.13
- 球衣-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
- 招摇-jaxrs-1.5.0
- 招摇球衣-jaxrs-1.5.0
- swagger-models-1.5.0
- 验证-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>
Class 从 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
就可以了!