Guy*_*ara 5 jersey gradle swagger spring-boot springfox
我有一个带有jersey和gradle的spring boot应用程序,我正在尝试使用springfox自动生成API文档.
我按照这里的步骤操作:http://springfox.github.io/springfox/docs/current/
这是我做的:
的build.gradle:
dependencies {
.........
//Swagger
compile "io.springfox:springfox-swagger2:2.4.0"
compile "io.springfox:springfox-bean-validators:2.4.0"
compile 'io.springfox:springfox-swagger-ui:2.4.0'
}
Run Code Online (Sandbox Code Playgroud)Spring boot应用:
@SpringBootApplication
@EnableSwagger2
public class AnalyzerServiceApplication{
public static void main(String[] args) {
SpringApplication.run(AnalyzerServiceApplication.class, args);
}
@Bean
public Docket analyzerApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.pathMapping("/")
.directModelSubstitute(LocalDate.class, String.class)
.genericModelSubstitutes(ResponseEntity.class)
.alternateTypeRules(
newRule(typeResolver.resolve(DeferredResult.class,
typeResolver.resolve(ResponseEntity.class, WildcardType.class)),
typeResolver.resolve(WildcardType.class)))
.useDefaultResponseMessages(false)
.globalResponseMessage(RequestMethod.GET,
newArrayList(new ResponseMessageBuilder()
.code(500)
.message("500 message")
.responseModel(new ModelRef("Error"))
.build()))
.securitySchemes(newArrayList(apiKey()))
.securityContexts(newArrayList(securityContext()))
.enableUrlTemplating(true)
.globalOperationParameters(
newArrayList(new ParameterBuilder()
.name("someGlobalParameter")
.description("Description of someGlobalParameter")
.modelRef(new ModelRef("string"))
.parameterType("query")
.required(true)
.build()))
.tags(new Tag("Pet Service", "All apis relating to pets"))
;
}
@Autowired
private TypeResolver typeResolver;
private ApiKey apiKey() {
return new ApiKey("mykey", "api_key", "header");
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("/anyPath.*"))
.build();
}
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope
= new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return newArrayList(
new SecurityReference("mykey", authorizationScopes));
}
@Bean
SecurityConfiguration security() {
return new SecurityConfiguration(
"test-app-client-id",
"test-app-client-secret",
"test-app-realm",
"test-app",
"apiKey",
ApiKeyVehicle.HEADER,
"api_key",
"," /*scope separator*/);
}
@Bean
UiConfiguration uiConfig() {
return new UiConfiguration("validatorUrl");
}
Run Code Online (Sandbox Code Playgroud)现在控制器(泽西岛)
@Api(value = "/widget")
@Path("/widget")
@Component
public class WidgetController extends BaseController {
@Autowired
private WidgetService widgetService;
@GET
@Path("/secHealth")
@ApiOperation(value = "Find pet by ID", notes = "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", response = Pet.class)
@ApiResponses(value = { @ApiResponse(code = 400, message = "Invalid ID supplied"),
@ApiResponse(code = 404, message = "Pet not found") })
public Response getPet() {
//Do something
}
Run Code Online (Sandbox Code Playgroud)当我启动服务器并导航到http:// localhost:8080/swagger-ui.html时,我可以看到"绿色"UI屏幕,其中只列出了基本错误控制器.我自己的控制器不存在.
我做错了什么?谢了,兄弟们
Dil*_*nan 11
从版本开始,2.5.0 springfox仅支持spring-mvc控制器.不支持像jersey这样的Jax-rs实现.
使用springfox的当前替代方法是将swagger-core库用于基于jax-rs/jersey的服务.
它确实有实施球衣支持所需的钩子2.6+.以下是在此问题中实现它的方法的摘录
目前,ResourceConfig有一个名为"getClasses"的方法,它将列出所有注册的内容.像资源,过滤器等...也许这可能会有所帮助.但请注意,返回的类也可能是过滤器或您可以使用jersey2注册的任何其他内容.
为了能够从Springfox swagger UI中看到Jersey方法:
添加SpringBoot应用程序配置类(使用@Configuration注释):
@Value("${springfox.documentation.swagger.v2.path}")
private String swagger2Endpoint;
在application.properties中添加对Jersey swagger.json的引用:
springfox.documentation.swagger.v2.path=/{change it to your Jersey api path}/swagger.json
现在你应该能够看到Jersey Swagger从Springfox Swagger UI页面生成api.
| 归档时间: |
|
| 查看次数: |
4346 次 |
| 最近记录: |