762 Star 6.6K Fork 1.4K

GVP萧明 / knife4j

 / 详情

@ApiOperationSupport参数忽略问题

已完成
创建于  
2020-03-04 13:53

大佬,首先向您致敬 ,其次请帮忙看下我在学习路上测试的问题:

  • User(id=null, username=null, birthday=null, sex=null, role=null)

  • Role(id=null, roleName=null)

  • Get请求:@ApiOperationSupport(ignoreParameters = {"user.id", "user.role.id"})user.id 参数忽略成功,user.role.id 参数忽略失败;

  • Get请求:@ApiOperationSupport(ignoreParameters = {"id", "role.id"} 参数都忽略成功

  • POST请求,使用JSON: ignoreParameters = {"user.id", "user.role.id"} 参数都忽略失败

  • POST请求,使用JSON:ignoreParameters = {"id", "role.id"} 参数都忽略失败

版本说明:
sprign-boot=2.2.4.RELEASE
knife4j-spring-boot-starter=2.0.1

User.java

package top.simba1949.common;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * @Author Theodore
 * @Date 2020/3/3 22:40
 */
@Data
@ApiModel(value = "user", description = "用户")
public class User implements Serializable {
    private static final long serialVersionUID = 536743503651429362L;
    @ApiModelProperty(name = "id", value = "主键", dataType = "java.lang.Integer")
    private Integer id;
    @ApiModelProperty(name = "username", value = "用户姓名", dataType = "java.lang.String")
    private String username;
    @ApiModelProperty(name = "birthday", value = "生日", dataType = "java.time.LocalDateTime")
    private LocalDateTime birthday;
    @ApiModelProperty(name = "sex", value = "性别,true 为男性, false 为女性", dataType = "java.lang.Boolean")
    private Boolean sex;

    @ApiModelProperty(name = "role", value = "用户角色", dataType = "top.simba1949.common.Role")
    private Role role;
}

Role.java

package top.simba1949.common;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @Author Theodore
 * @Date 2020/3/3 22:41
 */
@Data
@ApiModel(value = "role", description = "用户角色")
public class Role implements Serializable {
    private static final long serialVersionUID = -1075645135706942753L;
    @ApiModelProperty(name = "id", value = "角色主键", dataType = "java.lang.Integer")
    private Integer id;
    @ApiModelProperty(name = "roleName", value = "角色名称", dataType = "java.lang.String")
    private String roleName;
}

配置类

package top.simba1949.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.function.Predicate;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;

/**
 * swagger-bootstrap-ui 默认访问地址是:http://${host}:${port}/doc.html
 * 注意:使用权限控制需要释放以下三个接口:
 * /swagger-resources : Swagger的分组接口
 * /v2/api-docs?group=groupName : Swagger的具体分组实例接口,返回该分组下所有接口相关的Swagger信息
 * /v2/api-docs-ext?group=groupName : 该接口是SwaggerBootstrapUi提供的增强接口地址,如不使用UI增强,则可以忽略该接口
 *
 * @Author Theodore
 * @Date 2020/3/3 17:33
 */
@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class Swagger2Conf {

    /**
     * springfox.documentation.spring.web.plugins.Docket 用于构建 Springfox 框架
     * @return
     */
    @Bean
    public Docket commonDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
            // 如果存在多个 Docket ,需要进行分组命名
            .groupName("commonDocket-api")
            // 设置 meta 信息
            .apiInfo(apiInfo("标题:通用开发接口文档", "描述:通用开发接口文档"))
            // 启动 api 选择构建器
            .select()
            // 哪些包路径下属于通用开发接口文档
            .apis(RequestHandlerSelectors.basePackage("top.simba1949.controller.common"))
            // 路径筛选 PathSelectors.any() 匹配所有接口,也可以自定义匹配哪些接口
            .paths(PathSelectors.any())
            // 构建
            .build();
    }

    /**
     * 自定义匹配哪些接口
     * @return
     */
    private Predicate<String> postPaths() {
        return or(
            regex("/api/posts.*"),
            regex("/api/comments.*")
        );
    }

    @Bean
    public Docket companyDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
            // 如果存在多个 Docket ,需要进行分组命名
            .groupName("companyDocket-api")
            // 设置 meta 信息
            .apiInfo(apiInfo("标题:公司开发接口文档", "描述:公司开发接口文档"))
            // 启动 api 选择构建器
            .select()
            // 哪些包路径下属于公司开发接口文档
            .apis(RequestHandlerSelectors.basePackage("top.simba1949.controller.company"))
            // 路径筛选
            .paths(PathSelectors.any())
            // 构建
            .build();
    }

    private ApiInfo apiInfo(String title, String description) {
        // 名称,站点,邮箱地址
        Contact contact = new Contact("simba1949", "https://simba1949.blog.csdn.net", "simba1949@outlook.com");
        return new ApiInfoBuilder()
            // 标题
            .title(title)
            // 描述
            .description(description)
            // 服务条款链接
            .termsOfServiceUrl("http://hantsy.blogspot.com")
            // 联系人
            .contact(contact)
            // 认证许可
            .license("Apache License Version 2.0")
            // 认证许可链接
            .licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE")
            // 版本
            .version("2.0")
            .build();
    }
}

UserController.java

package top.simba1949.controller.common;

import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.simba1949.common.User;

/**
 * @Author Theodore
 * @Date 2020/3/3 17:48
 */
@ApiSort(1)
@Api(tags = {"用户模块"})
@RestController
@RequestMapping("user")
public class UserController {
    /**
     * ignoreParameters = {"user.id", "user.role.id"} user.id 忽略成功
     * ignoreParameters = {"id", "role.id"} 参数都忽略成功
     * @param user
     * @return
     */
    @GetMapping("user-str1")
    @ApiOperation(value = "获取user-str1")
    @ApiOperationSupport(order = 1, author = "theodore", ignoreParameters = {"user.id", "user.role.id"})
    public String getStr1(User user){
        return "user-str1";
    }

    /**
     * ignoreParameters = {"user.id", "user.role.id"} 参数都忽略失败
     * ignoreParameters = {"id", "role.id"} 参数都忽略失败
     * @param user
     * @return
     */
    @PostMapping("user-str2")
    @ApiOperation(value = "获取user-str2")
    @ApiOperationSupport(order = 2, ignoreParameters = {"user.id", "user.role.id"})
    public String getStr2(@RequestBody User user){
        return "user-str2";
    }
}

输入图片说明

大佬,首先向您致敬 ,其次请帮忙看下我在学习路上测试的问题:

  • User(id=null, username=null, birthday=null, sex=null, role=null)

  • Role(id=null, roleName=null)

  • Get请求:@ApiOperationSupport(ignoreParameters = {"user.id", "user.role.id"})user.id 参数忽略成功,user.role.id 参数忽略失败;

  • Get请求:@ApiOperationSupport(ignoreParameters = {"id", "role.id"} 参数都忽略成功

  • POST请求,使用JSON: ignoreParameters = {"user.id", "user.role.id"} 参数都忽略失败

  • POST请求,使用JSON:ignoreParameters = {"id", "role.id"} 参数都忽略失败

版本说明:knife4j-spring-boot-starter=2.0.1

评论 (2)

openpark 创建了任务
openpark 关联仓库设置为萧明/knife4j
openpark 修改了描述
openpark 修改了描述
openpark 修改了描述
openpark 修改了描述
openpark 修改了描述
展开全部操作日志

2.0.2 版本搞起来

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

登录 后才可以发表评论

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

搜索帮助