762 Star 6.6K Fork 1.4K

GVP萧明 / knife4j

 / 详情

全局参数与接口参数相同时会出现两个 相同参数 并且某一个为空 如图

已完成
创建于  
2018-08-16 19:39

输入图片说明

输入图片说明

评论 (5)

Mr.Ming 创建了任务

这个全局参数是你在前端添加的吗?

是的,本身使用了一个 ApiImplicitParam
输入图片说明

萧明 修改任务状态为进行中

全局参数功能当时是在没有继承类似JWT等功能时候开发的,所以如果本身后台接口有全局参数的情况,该功能可以不使用

两种解决方式:
1、后端swagger的config配置文件中为docker对象配置全局参数,例如:

ParameterBuilder parameterBuilder=new ParameterBuilder();
        List<Parameter> parameters= Lists.newArrayList();
        parameterBuilder.name("token").description("token令牌").modelRef(new ModelRef("String"))
                .parameterType("header").defaultValue("abc")
                .required(true).build();
        parameters.add(parameterBuilder.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("默认接口")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.swagger.bootstrap.ui.demo.controller"))
                .paths(PathSelectors.any())
                .build().globalOperationParameters(parameters)
                //...

2、如果有JWT等权限验证,可以配置securityContexts

@Bean(value = "defaultApi")
    @Order(value = 4)
    public Docket defaultApi() {
        ParameterBuilder parameterBuilder=new ParameterBuilder();
        List<Parameter> parameters= Lists.newArrayList();
        parameterBuilder.name("token").description("token令牌").modelRef(new ModelRef("String"))
                .parameterType("header").defaultValue("abc")
                .required(true).build();
        parameters.add(parameterBuilder.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("默认接口")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.swagger.bootstrap.ui.demo.controller"))
                .paths(PathSelectors.any())
                .build()
                .securityContexts(Lists.newArrayList(securityContext(),securityContext1())).securitySchemes(Lists.<SecurityScheme>newArrayList(apiKey(),apiKey1()));
    }

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

    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.regex("/.*"))
                .build();
    }

以上代码在swagger-bootstrap-ui-demo里,路径:https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/blob/master/swagger-bootstrap-ui-demo/src/main/java/com/swagger/bootstrap/ui/demo/config/SwaggerConfiguration.java

可以参考一下

萧明 任务状态进行中 修改为已完成

这个解决不了我的场景,因为每隔一段时间token会不一样,所以我在调用时需要在全局那个页面添加一个token参数与值,所以还是会出现重复参数。通过后台方式是没有办法解决

@Mr.Ming ok,下个版本会修复

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
118100 xiaoym 1578918321
Java
1
https://gitee.com/xiaoym/knife4j.git
git@gitee.com:xiaoym/knife4j.git
xiaoym
knife4j
knife4j

搜索帮助

53164aa7 5694891 3bd8fe86 5694891