我目前有几个共享公共对象的API。在某些情况下,我想在生成swagger文档时隐藏这些公共对象的某些属性。例如,我们说我有一个简单的课程:
public class Person {
private String forename;
private String surname;
private int age;
/* getters and setters with annotations here... */
}
对于某些API,我希望age字段出现在swagger文档中,但在其他API中我不会。
我不想使用hidden
注释的@ApiModelProperty
属性,因为这会隐藏所有API的属性。我可以看到有一个access
属性可以用于我自己的扩展SwaggerSpecFilter
的过滤器类。
如何通过实现此接口的isPropertyAllowed
方法来实现此目的?在该方法中似乎没有任何参数可以用来找出哪个Api正在使用Model和property。
答案 0 :(得分:2)
我设法通过让所有API类都有一个“过滤器”类来实现这一点,该类将添加/删除/编辑API模型中的任何属性,如下所示:
public class MyApiFilter implements SwaggerFilterIF {
@Override
public void filter(Swagger swagger) {
Map<String, Model> definitions = swagger.getDefinitions();
// remove 'age' from 'Person'
Model model = definitions.get("Person");
model.getProperties().remove("age");
}
然后在API类中引用它:
@Api
@Path("/myapi")
public class MyApi implements SwaggerApiIF {
public MyApi () {
super();
}
@Override
public SwaggerFilterIF getFilter() {
return new MyApiFilter();
}
}
然后我有一个servlet来为我可以单独访问的每个API生成API文档。在这个servlet中,我在API的'Filter'类中调用filter
方法,它将根据需要过滤swagger定义:
for (final SwaggerApiIF api : apis) {
final Swagger swagger = new Reader(new Swagger(), config).read(api.getClass());
api.getFilter().filter(swagger);
}