gpt4 book ai didi

java - 从 Swagger 中删除额外的参数

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:40 24 4
gpt4 key购买 nike

在Spring boot上的项目中实现了Swagger。面临这样的问题:swagger-ui 参数列表中有很多额外的参数。 Controller 直接与内部有 ManyToOne 和 OneToMany 字段的实体一起工作,或者与从实体扩展的过滤器一起工作,作为链接的结果,有大量完全不必要的参数用于测试 api。

实体示例:

@Entity
@Table
public class Biometric {

public enum Type {
SECURITY,
CAMERA
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ApiModelProperty(value = "Id", example = "0")
private Long id;

@Column
@ApiParam(hidden = true)
@ApiModelProperty(value = "Token", example = "")
private String token;

@Column
@ApiModelProperty(value = "Name", example = "")
private String name;

@Column
@ApiModelProperty(value = "State", example = "")
private Boolean state;

@Column
@ApiParam(hidden = true)
@ApiModelProperty(value = "Version", example = "")
private String version;

@Column
@ApiParam(hidden = true)
@ApiModelProperty(value = "Number of users", example = "0")
private Long users;

@Column
@ApiModelProperty(value = "Type")
private Type type;

@ManyToOne
@ApiModelProperty(value = "Company", example = "")
private Company company;
}

这里我尝试隐藏一些对测试来说无关紧要的参数,例如使用@ApiParam的token和版本,但这种焦点不适用于复杂类型。

过滤器示例:

public class BiometricFilter extends Biometric {

@ApiModelProperty(value = "City", example = "0")
private City city;


@ApiModelProperty(value = "Идентификатор района", example = "0")
private District district;
}

最后是一个示例 Controller :

ApiOperation(value = "", response = Biometric.class, responseContainer = "List")
@GetMapping
public Result get(Pageable pageable, BiometricFilter biometricFilter, ServletRequest request) {

return new Result(true, biometricRepo.findAll(BiometricSpec.find(biometricFilter), pageable));
}

经过大量谷歌搜索后,我得出的结论是,唯一或多或少可行的选择是重建 Controller 以与 DTO 对象一起使用,其中嵌套类被替换为简单的标识符类型,但这意味着我将不得不重建很多 Controller (实际上,问题是:有没有办法不用重建 Controller ,或者我的假设是否正确,我必须重建一堆 Controller ?

警告问题,是的,需要切换到 swagger。

最佳答案

我使用 Swagger API 和后来的 OpenAPI 规范很多年了。早些时候我尝试使用 SpringFox 自动构建 Swagger 文件。它非常灵活 - 对于任何更改,我们都有 Swagger 文件的更新版本。

但我在这种方法中遇到了一些问题:Spring 的开发速度比 SpringFox 快得多,注释无法涵盖最终 Swagger 文件的所有要求,Swagger 文件的最终实现没有优化并且非常“直接”和“虚拟”。此外,在函数类中使用大量非函数代码(注释)并不是一个好方法。

我完成了 SpringFox 的使用,只使用了 Swagger UI Editor。我的 Swagger 文件变得更加灵活,具有更高级别的架构,没有不必要的垃圾,更加“简洁”。而且功能代码更加清晰。

我知道我的建议不能解决您的问题,但这只是建议,我使用自动工具 4-5 年,但又回到了手动构建 Swagger 文件))

关于java - 从 Swagger 中删除额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59049894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com