parent
57c8f34c3b
commit
199cb67fa3
@ -0,0 +1,20 @@ |
|||||||
|
package com.gitee.sop.servercommon.swagger; |
||||||
|
|
||||||
|
import io.swagger.models.parameters.Parameter; |
||||||
|
import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2MapperImpl; |
||||||
|
|
||||||
|
import java.util.Comparator; |
||||||
|
import java.util.List; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
public class CustomModelToSwaggerMapper extends ServiceModelToSwagger2MapperImpl { |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<Parameter> parameterListToParameterList(List<springfox.documentation.service.Parameter> list) { |
||||||
|
// list需要根据order|postion排序
|
||||||
|
list = list.stream() |
||||||
|
.sorted(Comparator.comparingInt(springfox.documentation.service.Parameter::getOrder)) |
||||||
|
.collect(Collectors.toList()); |
||||||
|
return super.parameterListToParameterList(list); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,127 @@ |
|||||||
|
package com.gitee.sop.servercommon.swagger; |
||||||
|
|
||||||
|
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; |
||||||
|
|
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by wujie on 2019/2/16. |
||||||
|
* 自定义ExpandedParameterBuilderPlugin,主要是修正源码query传入请求参数postion无效 |
||||||
|
* 这里,将postion赋值给order |
||||||
|
* |
||||||
|
* https://blog.csdn.net/qq_38316721/article/details/103908793
|
||||||
|
*/ |
||||||
|
public class CustomSwaggerParameterBuilder implements ExpandedParameterBuilderPlugin { |
||||||
|
|
||||||
|
private final DescriptionResolver descriptions; |
||||||
|
private final EnumTypeDeterminer enumTypeDeterminer; |
||||||
|
|
||||||
|
public CustomSwaggerParameterBuilder( |
||||||
|
DescriptionResolver descriptions, |
||||||
|
EnumTypeDeterminer enumTypeDeterminer) { |
||||||
|
this.descriptions = descriptions; |
||||||
|
this.enumTypeDeterminer = enumTypeDeterminer; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public 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()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public 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()) |
||||||
|
//源码这里是: SWAGGER_PLUGIN_ORDER,需要修正
|
||||||
|
.order(apiModelProperty.position()) |
||||||
|
.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>() { |
||||||
|
@Override |
||||||
|
public String apply(final Object input) { |
||||||
|
return input.toString(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue