springboot中如何将springfox-swagger2与jersey集成
How to integrate springfox-swagger2 with jersey in springboot
我正在使用带有球衣的 springboot 作为 restful API。现在我想将 swagger2 集成到我的项目中,但它不起作用。当我 运行 我的应用程序并访问 http://localhost:8080/swagger-ui.html 时。我得到了 swagger 网页,但没有显示 api(见下图)。好像swagger没找到我的apiclasses.
下面是我添加的依赖
compile "io.springfox:springfox-swagger2:2.5.0"
compile 'io.springfox:springfox-swagger-ui:2.5.0'
下面是我的申请class:
@SpringBootApplication
@EnableSwagger2
@EnableAutoConfiguration
@Configuration
@ComponentScan(value = "com.ticket.api")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Docket documentation() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.lenovo.ticket.api"))
.paths(PathSelectors.any())
.build().pathMapping("/")
.useDefaultResponseMessages(false);
}
@Bean
UiConfiguration uiConfig() {
return UiConfiguration.DEFAULT;
}
}
下面是我的球衣配置class:
@Configuration
@ApplicationPath("/ticket")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig(){
register(Helloworld.class);
}
}
不支持球衣,请参考。鉴于答案来自 SpringFox 库的作者,我认为信息是可靠的。
正如之前在此线程中回答的那样,如果端点是使用 Spring MVC 而不是 Jersey 实现的,@EnableSwagger2
注释和 springfox
依赖项将起作用。
为了记录您的 Jersey 实现端点:
1)
确保您的 Spring 引导应用通过以下方式扫描位于特定包(即 com.asimio.jerseyexample.config)中的组件:
@SpringBootApplication(
scanBasePackages = {
"com.asimio.jerseyexample.config", "com.asimio.jerseyexample.rest"
}
)
2) Jersey 配置class 实现:
package com.asimio.jerseyexample.config;
...
@Component
public class JerseyConfig extends ResourceConfig {
@Value("${spring.jersey.application-path:/}")
private String apiPath;
public JerseyConfig() {
// Register endpoints, providers, ...
this.registerEndpoints();
}
@PostConstruct
public void init() {
// Register components where DI is needed
this.configureSwagger();
}
private void registerEndpoints() {
this.register(HelloResource.class);
// Access through /<Jersey's servlet path>/application.wadl
this.register(WadlResource.class);
}
private void configureSwagger() {
// Available at localhost:port/swagger.json
this.register(ApiListingResource.class);
this.register(SwaggerSerializers.class);
BeanConfig config = new BeanConfig();
config.setConfigId("springboot-jersey-swagger-docker-example");
config.setTitle("Spring Boot + Jersey + Swagger + Docker Example");
config.setVersion("v1");
config.setContact("Orlando L Otero");
config.setSchemes(new String[] { "http", "https" });
config.setBasePath(this.apiPath);
config.setResourcePackage("com.asimio.jerseyexample.rest.v1");
config.setPrettyPrint(true);
config.setScan(true);
}
}
3) 使用 JAX-RS (Jersey) 和 Swagger 注释的资源实现:
package com.asimio.jerseyexample.rest.v1;
...
@Component
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Api(value = "Hello resource", produces = "application/json")
public class HelloResource {
private static final Logger LOGGER = LoggerFactory.getLogger(HelloResource.class);
@GET
@Path("v1/hello/{name}")
@ApiOperation(value = "Gets a hello resource. Version 1 - (version in URL)", response = Hello.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Hello resource found"),
@ApiResponse(code = 404, message = "Hello resource not found")
})
public Response getHelloVersionInUrl(@ApiParam @PathParam("name") String name) {
LOGGER.info("getHelloVersionInUrl() v1");
return this.getHello(name, "Version 1 - passed in URL");
}
...
}
4) 确保您应用的 Spring 引导配置文件区分 Spring MVC(用于执行器端点)和 Jersey(用于资源)端点:
application.yml
...
# Spring MVC dispatcher servlet path. Needs to be different than Jersey's to enable/disable Actuator endpoints access (/info, /health, ...)
server.servlet-path: /
# Jersey dispatcher servlet
spring.jersey.application-path: /api
...
这些步骤在我不久前创建的博客post中有更详细的介绍,Microservices using Spring Boot, Jersey Swagger and Docker
它引用了我的 Bitbucket 存储库中的源代码和一个 运行 示例
我正在使用带有球衣的 springboot 作为 restful API。现在我想将 swagger2 集成到我的项目中,但它不起作用。当我 运行 我的应用程序并访问 http://localhost:8080/swagger-ui.html 时。我得到了 swagger 网页,但没有显示 api(见下图)。好像swagger没找到我的apiclasses.
下面是我添加的依赖
compile "io.springfox:springfox-swagger2:2.5.0"
compile 'io.springfox:springfox-swagger-ui:2.5.0'
下面是我的申请class:
@SpringBootApplication
@EnableSwagger2
@EnableAutoConfiguration
@Configuration
@ComponentScan(value = "com.ticket.api")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Docket documentation() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.lenovo.ticket.api"))
.paths(PathSelectors.any())
.build().pathMapping("/")
.useDefaultResponseMessages(false);
}
@Bean
UiConfiguration uiConfig() {
return UiConfiguration.DEFAULT;
}
}
下面是我的球衣配置class:
@Configuration
@ApplicationPath("/ticket")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig(){
register(Helloworld.class);
}
}
不支持球衣,请参考
正如之前在此线程中回答的那样,如果端点是使用 Spring MVC 而不是 Jersey 实现的,@EnableSwagger2
注释和 springfox
依赖项将起作用。
为了记录您的 Jersey 实现端点:
1) 确保您的 Spring 引导应用通过以下方式扫描位于特定包(即 com.asimio.jerseyexample.config)中的组件:
@SpringBootApplication(
scanBasePackages = {
"com.asimio.jerseyexample.config", "com.asimio.jerseyexample.rest"
}
)
2) Jersey 配置class 实现:
package com.asimio.jerseyexample.config;
...
@Component
public class JerseyConfig extends ResourceConfig {
@Value("${spring.jersey.application-path:/}")
private String apiPath;
public JerseyConfig() {
// Register endpoints, providers, ...
this.registerEndpoints();
}
@PostConstruct
public void init() {
// Register components where DI is needed
this.configureSwagger();
}
private void registerEndpoints() {
this.register(HelloResource.class);
// Access through /<Jersey's servlet path>/application.wadl
this.register(WadlResource.class);
}
private void configureSwagger() {
// Available at localhost:port/swagger.json
this.register(ApiListingResource.class);
this.register(SwaggerSerializers.class);
BeanConfig config = new BeanConfig();
config.setConfigId("springboot-jersey-swagger-docker-example");
config.setTitle("Spring Boot + Jersey + Swagger + Docker Example");
config.setVersion("v1");
config.setContact("Orlando L Otero");
config.setSchemes(new String[] { "http", "https" });
config.setBasePath(this.apiPath);
config.setResourcePackage("com.asimio.jerseyexample.rest.v1");
config.setPrettyPrint(true);
config.setScan(true);
}
}
3) 使用 JAX-RS (Jersey) 和 Swagger 注释的资源实现:
package com.asimio.jerseyexample.rest.v1;
...
@Component
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Api(value = "Hello resource", produces = "application/json")
public class HelloResource {
private static final Logger LOGGER = LoggerFactory.getLogger(HelloResource.class);
@GET
@Path("v1/hello/{name}")
@ApiOperation(value = "Gets a hello resource. Version 1 - (version in URL)", response = Hello.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Hello resource found"),
@ApiResponse(code = 404, message = "Hello resource not found")
})
public Response getHelloVersionInUrl(@ApiParam @PathParam("name") String name) {
LOGGER.info("getHelloVersionInUrl() v1");
return this.getHello(name, "Version 1 - passed in URL");
}
...
}
4) 确保您应用的 Spring 引导配置文件区分 Spring MVC(用于执行器端点)和 Jersey(用于资源)端点:
application.yml
...
# Spring MVC dispatcher servlet path. Needs to be different than Jersey's to enable/disable Actuator endpoints access (/info, /health, ...)
server.servlet-path: /
# Jersey dispatcher servlet
spring.jersey.application-path: /api
...
这些步骤在我不久前创建的博客post中有更详细的介绍,Microservices using Spring Boot, Jersey Swagger and Docker
它引用了我的 Bitbucket 存储库中的源代码和一个 运行 示例