在使用springfox-swagger2 2.9.2时position排序没有生效,在网上找了相关资料,需要重写swagger的两个类,具体如下。

package top.lidaoyuan.hamster.api.config.swagger;import java.util.List;
import java.util.stream.Collectors;import org.springframework.context.annotation.Primary;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import io.swagger.models.parameters.Parameter;
import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl;/*** Created by wujie on 2019/2/16.* 重写 将Document转换成Swagger 类, 根据order进行排序*/
@Primary //同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下
@Component("ServiceModelToSwagger2Mapper")
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CustomModelToSwaggerMapper extends ServiceModelToSwagger2MapperImpl {@Overrideprotected List<Parameter> parameterListToParameterList(List<springfox.documentation.service.Parameter> list) {//list需要根据order|postion排序list = list.stream().sorted((p1, p2) -> Integer.compare(p1.getOrder(), p2.getOrder())).collect(Collectors.toList());
//        log.debug("************************************list:{}", list.toString());return super.parameterListToParameterList(list);}
}
package top.lidaoyuan.hamster.api.config.swagger;import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER;import java.util.Arrays;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.service.AllowableListValues;
import springfox.documentation.service.AllowableValues;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.schema.EnumTypeDeterminer;
import springfox.documentation.spi.service.ExpandedParameterBuilderPlugin;
import springfox.documentation.spi.service.contexts.ParameterExpansionContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
import springfox.documentation.swagger.readers.parameter.Examples;
import springfox.documentation.swagger.schema.ApiModelProperties;/*** Created by wujie on 2019/2/16.* 自定义ExpandedParameterBuilderPlugin,主要是修正源码query传入请求参数postion无效* 这里,将postion赋值给order*/
@Primary
@Component
public class CustomSwaggerParameterBuilder implements ExpandedParameterBuilderPlugin {private final DescriptionResolver descriptions;private final EnumTypeDeterminer enumTypeDeterminer;@Autowiredpublic CustomSwaggerParameterBuilder(DescriptionResolver descriptions,EnumTypeDeterminer enumTypeDeterminer) {this.descriptions = descriptions;this.enumTypeDeterminer = enumTypeDeterminer;}@Overridepublic void apply(ParameterExpansionContext context) {Optional<ApiModelProperty> apiModelPropertyOptional = context.findAnnotation(ApiModelProperty.class);if (apiModelPropertyOptional.isPresent()) {fromApiModelProperty(context, apiModelPropertyOptional.get());}Optional<ApiParam> apiParamOptional = context.findAnnotation(ApiParam.class);if (apiParamOptional.isPresent()) {fromApiParam(context, apiParamOptional.get());}}@Overridepublic boolean supports(DocumentationType delimiter) {return SwaggerPluginSupport.pluginDoesApply(delimiter);}private void fromApiParam(ParameterExpansionContext context, ApiParam apiParam) {String allowableProperty = Strings.emptyToNull(apiParam.allowableValues());AllowableValues allowable = allowableValues(Optional.fromNullable(allowableProperty),context.getFieldType().getErasedType());maybeSetParameterName(context, apiParam.name()).description(descriptions.resolve(apiParam.value())).defaultValue(apiParam.defaultValue()).required(apiParam.required()).allowMultiple(apiParam.allowMultiple()).allowableValues(allowable).parameterAccess(apiParam.access()).hidden(apiParam.hidden()).scalarExample(apiParam.example()).complexExamples(Examples.examples(apiParam.examples())).order(SWAGGER_PLUGIN_ORDER).build();}private void fromApiModelProperty(ParameterExpansionContext context, ApiModelProperty apiModelProperty) {String allowableProperty = Strings.emptyToNull(apiModelProperty.allowableValues());AllowableValues allowable = allowableValues(Optional.fromNullable(allowableProperty),context.getFieldType().getErasedType());maybeSetParameterName(context, apiModelProperty.name()).description(descriptions.resolve(apiModelProperty.value())).required(apiModelProperty.required()).allowableValues(allowable).parameterAccess(apiModelProperty.access()).hidden(apiModelProperty.hidden()).scalarExample(apiModelProperty.example()).order(apiModelProperty.position()) //源码这里是: SWAGGER_PLUGIN_ORDER,需要修正.build();}private ParameterBuilder maybeSetParameterName(ParameterExpansionContext context, String parameterName) {if (!Strings.isNullOrEmpty(parameterName)) {context.getParameterBuilder().name(parameterName);}return context.getParameterBuilder();}private AllowableValues allowableValues(final Optional<String> optionalAllowable, Class<?> fieldType) {AllowableValues allowable = null;if (enumTypeDeterminer.isEnum(fieldType)) {allowable = new AllowableListValues(getEnumValues(fieldType), "LIST");} else if (optionalAllowable.isPresent()) {allowable = ApiModelProperties.allowableValueFromString(optionalAllowable.get());}return allowable;}private List<String> getEnumValues(final Class<?> subject) {return Lists.transform(Arrays.asList(subject.getEnumConstants()), new Function<Object, String>() {@Overridepublic String apply(final Object input) {return input.toString();}});}
}

原文链接 https://blog.csdn.net/qq_38316721/article/details/103908793

swagger2接口参数排序/position失效的问题相关推荐

  1. swagger2 接口排序

    最近在使用swagger2作用在线文档工具,完成后发现在页面上模块和接口的顺序是混乱的. swagger 使用的版本信息 <dependency><groupId>io.spr ...

  2. swagger 接口参数顺序_swagger扩展为按代码定义顺序展示接口和字段

    1. 存在的问题 我们在项目中使用swagger2.0时,发现如下问题: 我们想要按字段排序必须显示声明排序字段@ApiModelProperty(position=0) swagger对注解@Api ...

  3. php 参数排序 计算sign_sign计算

    ## sign签名计算 ### 1) 签名说明 > 将所有传递的参数名(不包含sign和timestamp参数)按照字母升序排序,然后进行url拼接,然后再取其MD5码 > 注意:**si ...

  4. swagger 接口参数顺序_Swagger常用参数用法 - mao2080 - 博客园

    别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处: http://www.cnblogs.com/ ...

  5. 偏前端 - vue-cli(axios请求数据==》token+按接口参数顺序(参数值拼接base64)- MD5)...

    token+按接口参数顺序(参数值拼接base64)-> MD5) 请教于"喵咪",再此特别鸣谢!~ 特别强调:import qs from qs; 这个内部方法一定要用哦. ...

  6. 如何优雅的实现 Spring Boot 接口参数加密解密?

    点击关注公众号,Java干货及时送达 加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和 ...

  7. SpringBoot实现通用的接口参数校验

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:cipher juejin.im/post/5af3c25b ...

  8. java 接口参数验证_SpringBoot实现通用的接口参数校验

    作者:cipher 来源:http://39sd.cn/560BA 本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在 ...

  9. php api 无符号整数基数为16的整数参数的字符串表示形式,[1.12]-参数规则:接口参数规则配置 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...

    "播下一种思想,收获一种行为:播下一种行为,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运." --<成君忆:水煮三国> 1.12.1 参数解析 ...

最新文章

  1. centos 配置bond_Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
  2. linux下c的网络编程---转载
  3. 奢侈品级别的广告位,到底要不要继续砸钱?
  4. mysql 聚合函数 怎么用在条件里_MySql 中聚合函数增加条件表达式的方法
  5. 深入理解Java main方法
  6. 1 LoRa 基本知识(参考LoRa物联网通信技术)
  7. 大一计算机课程ppt作业,《计算机应用基础》课程第4次作业-PPT操作题答案步骤...
  8. 【前端小白】pxcook读取psd设计文件
  9. 有关php外文期刊,口腔外文杂志、收录数据库、参考信息汇总
  10. vue error The code generator has deoptimised the styling exceeds the max of 100KB
  11. 恶心的八皇后全解python版
  12. 简述自动化测试实习收获
  13. 2021-08-20红外额温枪方案核心芯片ZHW3548
  14. android命令行启动,Android中使用am命令实现在命令行启动程序详解
  15. 配置系统初始化失败0 x84b10001当在Windows上安装SQL Server
  16. yyyyMMdd/HHmmss转化
  17. 请广大编程爱好者加入QQ群5907439
  18. 计量经济学——一元线性回归模型(例题)
  19. 11:C语言之求sn=a+aa+aaa+aaaa+......的值
  20. 关于KB2464588的一些问题

热门文章

  1. Ajax 详解 网页从输入url到渲染的流程 同步 异步 你想要的全都有
  2. Synchronized在JDK1.6中的优化
  3. 字节跳动之所以成功,是因为管理模式牛逼!
  4. 图论(最短路,最小生成树,并查集)
  5. TCP延迟ACK策略
  6. openSuse 给i+n双显卡笔记本的分享
  7. GitHub 断供危机来了!权威解读程序员应对指南
  8. github最近上不了,如何上github(windows)
  9. 在win7中创建非快捷方式的IE图标
  10. python面向对象3(钻石继承的问题,多继承的super用法)