1. 存在的问题
我们在项目中使用swagger2.0时,发现如下问题:
我们想要按字段排序必须显示声明排序字段@ApiModelProperty(position=0)
swagger对注解@ApiOperation不支持position属性了,即不能按照指定接口顺序排序。(ps:官方也不提供解决,说设计如此,通过接口地址来排序。链接)
2.解决方法
查询官网
使用对应的扩展插件(ModelPropertyBuilderPlugin、OperationBuilderPlugin)
2.1使用ModelPropertyBuilderPlugin按代码顺序展示请求和响应字段
可以参考ModelPropertyBuilderPlugin的实现类ApiModelPropertyPropertyBuilder来实现自己的插件,
大概实现思路为:获取到字段上有ApiModelProperty注解的字段所在的类,然后获取所有字段数组,看这个字段在数组的哪个位置,就设置position属性。
实现代码如下:
/**
* 通过编写插件实现字段按类变量定义顺序排序,丰富模型属性
*/
@Component
public class CustomApiModelPropertyPositionBuilder implements ModelPropertyBuilderPlugin {
private Log log = LogFactory.getLog(getClass());
@Override
public boolean supports(DocumentationType delimiter) {
return SwaggerPluginSupport.pluginDoesApply(delimiter);
}
@Override
public void apply(ModelPropertyContext context) {
Optional beanPropertyDefinitionOpt = context.getBeanPropertyDefinition();
Optional annotation = Optional.absent();
if (context.g