swagger2接口参数排序/position失效的问题
在使用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失效的问题相关推荐
- swagger2 接口排序
最近在使用swagger2作用在线文档工具,完成后发现在页面上模块和接口的顺序是混乱的. swagger 使用的版本信息 <dependency><groupId>io.spr ...
- swagger 接口参数顺序_swagger扩展为按代码定义顺序展示接口和字段
1. 存在的问题 我们在项目中使用swagger2.0时,发现如下问题: 我们想要按字段排序必须显示声明排序字段@ApiModelProperty(position=0) swagger对注解@Api ...
- php 参数排序 计算sign_sign计算
## sign签名计算 ### 1) 签名说明 > 将所有传递的参数名(不包含sign和timestamp参数)按照字母升序排序,然后进行url拼接,然后再取其MD5码 > 注意:**si ...
- swagger 接口参数顺序_Swagger常用参数用法 - mao2080 - 博客园
别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处: http://www.cnblogs.com/ ...
- 偏前端 - vue-cli(axios请求数据==》token+按接口参数顺序(参数值拼接base64)- MD5)...
token+按接口参数顺序(参数值拼接base64)-> MD5) 请教于"喵咪",再此特别鸣谢!~ 特别强调:import qs from qs; 这个内部方法一定要用哦. ...
- 如何优雅的实现 Spring Boot 接口参数加密解密?
点击关注公众号,Java干货及时送达 加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和 ...
- SpringBoot实现通用的接口参数校验
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:cipher juejin.im/post/5af3c25b ...
- java 接口参数验证_SpringBoot实现通用的接口参数校验
作者:cipher 来源:http://39sd.cn/560BA 本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在 ...
- php api 无符号整数基数为16的整数参数的字符串表示形式,[1.12]-参数规则:接口参数规则配置 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
"播下一种思想,收获一种行为:播下一种行为,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运." --<成君忆:水煮三国> 1.12.1 参数解析 ...
最新文章
- centos 配置bond_Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
- linux下c的网络编程---转载
- 奢侈品级别的广告位,到底要不要继续砸钱?
- mysql 聚合函数 怎么用在条件里_MySql 中聚合函数增加条件表达式的方法
- 深入理解Java main方法
- 1 LoRa 基本知识(参考LoRa物联网通信技术)
- 大一计算机课程ppt作业,《计算机应用基础》课程第4次作业-PPT操作题答案步骤...
- 【前端小白】pxcook读取psd设计文件
- 有关php外文期刊,口腔外文杂志、收录数据库、参考信息汇总
- vue error The code generator has deoptimised the styling exceeds the max of 100KB
- 恶心的八皇后全解python版
- 简述自动化测试实习收获
- 2021-08-20红外额温枪方案核心芯片ZHW3548
- android命令行启动,Android中使用am命令实现在命令行启动程序详解
- 配置系统初始化失败0 x84b10001当在Windows上安装SQL Server
- yyyyMMdd/HHmmss转化
- 请广大编程爱好者加入QQ群5907439
- 计量经济学——一元线性回归模型(例题)
- 11:C语言之求sn=a+aa+aaa+aaaa+......的值
- 关于KB2464588的一些问题