Priest Tomb



Swagger 看不到字段注解说明

1 抛个异常

临下班的时候,前端有人反馈说,怎么对接口的时候 Swagger 文档里看不到对象的具体字段和中文名,这样就得找后端反复去问,额外的沟通成本,很浪费时间。

平时好像有看到过某些接口有字段说明,有些接口没有,一直没放在心上,既然有人提了,那还是来看看到底怎么回事吧。


混入防转防爬防抄袭声明:本文《Swagger 看不到字段注解说明》首发且仅发布于没有名字的博客


2 问题排查

从 Swagger 页面上看了一下,发现到细节:同一个对象,如果是接口入参,就能展示出字段来,但是在分页查询接口的出参中,就没了详情,只展示到封装的 Page 对象这一级。

网上简单一搜,好家伙,很常见的问题嘛,那来一个个排查。

2.1 注解加了吗

别看是一句废话,但确实该优先排查。

2.2 泛型 T 问题

后端定义一些通用的返回对象,大概率会使用到泛型,这里分两种情况。

  • 第一种 字段标记了泛型 T
private T data;

public T getData() {
    return data;
}

必须注意在其 get 方法的返回也必须是 T,不能是 Object。

  • 第二种 类是泛型 T
public class Page<T> {}

必须注意使用到该泛型 Page 的地方,要显式指定 T 的具体类型,使用 ? 会导致不显示。

public R<Page<StudentTO>> page() {}

2.3 不要用注解的 example

@ApiModelProperty(value = "结果", example = "示例会覆盖??")
private List list;

如果设置 example 的值就会发现

swagger_example.png

2.4 字段和 get 方法不匹配

其实跟上面讲的泛型类似,这里有常见的两种情况,其中一种就是我这里踩到的坑。

  • 第一种 bool 类型字段以 is 开头

编译器或者某些插件自动生成 get 方法时,遇到 is 开头的,不会生成对应的 getIsXXX()

  • 第二种 有自定义 get 方法

比如分页对象中,虽然没有定义总页数 totalPage 这个字段,但可以通过总条数和页大小来算,于是定义了一个 getTotalPage() 方法。

这两种情况如果出现,整个类都不会显示具体的字段。


3 参考

使用swagger-bootstarap-ui 响应类3层嵌套泛型显示的坑

Swagger字段属性说明不显示