首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swagger描述隐藏spring boot应用程序中的端点

Swagger描述隐藏spring boot应用程序中的端点
EN

Stack Overflow用户
提问于 2021-10-11 10:06:04
回答 1查看 119关注 0票数 0

我在我的应用程序中遇到了一个非常奇怪的行为。

代码语言:javascript
运行
复制
@RestController
@RequestMapping("users")
@Validated
@Api(tags = "User controller v2")
public class UserController {

    @ApiOperation(value = "Get details of a user by id")
    @ApiResponses(value = {@ApiResponse(code = 400, message = "Bad Request"),
        @ApiResponse(code = 401, message = "Authorization information is missing or invalid."),
        @ApiResponse(code = 403, message = "Requested resource is forbidden for current user"),
        @ApiResponse(code = 200, message = "OK")})
    @GetMapping("/{userId}")
    public ResponseEntity<User> getUserDetails(@PathVariable @NotNull String userId) {
        // calling service methods
    }
}

这很好用,这就是我在/swagger-ui.html上看到的

但是如果我将任何swagger描述添加到我的请求参数中,比如默认值,我在swagger中就看不到这个方法了:

代码语言:javascript
运行
复制
@ApiOperation(value = "Get details of a user by id")
@ApiResponses(value = {@ApiResponse(code = 400, message = "Bad Request"),
    @ApiResponse(code = 401, message = "Authorization information is missing or invalid."),
    @ApiResponse(code = 403, message = "Requested resource is forbidden for current user"),
    @ApiResponse(code = 200, message = "OK")})
@GetMapping("/{userId}")
public ResponseEntity<User> getUserDetails(
    @ApiParam(defaultValue = "12345") @PathVariable @NotNull String userId) {
    // calling service methods
}

我的swagger就是这样配置的

代码语言:javascript
运行
复制
public class WebConfiguration {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .securitySchemes(Collections.singletonList(apiKey()))
            .securityContexts(Collections.singletonList(securityContext()))
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.test"))
            .paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("My test service")
            .version("2.0")
            .build();
    }

    private ApiKey apiKey() {
        return new ApiKey("JWT", "Authorization", "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder().securityReferences(defaultAuth()).build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[] {authorizationScope};
        return Collections.singletonList(new SecurityReference("JWT", authorizationScopes));
    }
}

此外,在我的应用程序日志中,我看到了这样的消息:

代码语言:javascript
运行
复制
ERROR [,,,] 36927 --- [  restartedMain] s.d.s.web.scanners.ApiDescriptionReader  : Skipping process path[/api/v2/users/{userId}], method[getUserDetails] as it has an error.

你知道为什么会发生这种情况,以及如何解决吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-11 11:54:34

在调试Spring上下文时,我在ApiDescriptionReader类中发现了这样的错误:

java.lang.NoSuchMethodError: io.swagger.annotations.ApiParam.allowEmptyValue()Z

我已经通过添加以下依赖项解决了这个问题:

代码语言:javascript
运行
复制
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>1.6.2</version>
</dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69524440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档