import staticspringfox.documentation.schema.Annotations.findPropertyAnnotation;import staticspringfox.documentation.swagger.schema.ApiModelProperties.findApiModePropertyAnnotation;importjava.lang.reflect.Field;importorg.apache.commons.lang3.ArrayUtils;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.stereotype.Component;importcom.fasterxml.jackson.databind.introspect.AnnotatedField;importcom.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;importcom.google.common.base.Optional;importio.swagger.annotations.ApiModelProperty;importspringfox.documentation.spi.DocumentationType;importspringfox.documentation.spi.schema.ModelPropertyBuilderPlugin;importspringfox.documentation.spi.schema.contexts.ModelPropertyContext;importspringfox.documentation.swagger.common.SwaggerPluginSupport;

@Componentpublic class CustomApiModelPropertyPositionBuilder implementsModelPropertyBuilderPlugin {private Log log =LogFactory.getLog(getClass());

@Overridepublic booleansupports(DocumentationType delimiter) {returnSwaggerPluginSupport.pluginDoesApply(delimiter);

}

@Overridepublic voidapply(ModelPropertyContext context) {

Optional beanPropertyDefinitionOpt =context.getBeanPropertyDefinition();

Optional annotation =Optional.absent();if(context.getAnnotatedElement().isPresent()) {

annotation=annotation.or(findApiModePropertyAnnotation(context.getAnnotatedElement().get()));

}if(context.getBeanPropertyDefinition().isPresent()) {

annotation= annotation.or(findPropertyAnnotation(context.getBeanPropertyDefinition().get(), ApiModelProperty.class));

}if(beanPropertyDefinitionOpt.isPresent()) {

BeanPropertyDefinition beanPropertyDefinition=beanPropertyDefinitionOpt.get();if (annotation.isPresent() && annotation.get().position() != 0) {return;

}

AnnotatedField field=beanPropertyDefinition.getField();

Class> clazz =field.getDeclaringClass();

Field[] declaredFields=clazz.getDeclaredFields();

Field declaredField;try{

declaredField=clazz.getDeclaredField(field.getName());

}catch (NoSuchFieldException |SecurityException e) {

log.error("", e);return;

}int indexOf =ArrayUtils.indexOf(declaredFields, declaredField);if (indexOf != -1) {

context.getBuilder().position(indexOf);

}

}

}

}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐