栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Swagger2枚举参数自动转换

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Swagger2枚举参数自动转换

增加全局配置,后续只需在枚举字段指明枚举类位置,不需要写繁琐的说明

@Configuration
@EnableSwagger2
@Slf4j
public class Swagger2Config implements ModelPropertyBuilderPlugin {
	
	@Override
	public void apply(ModelPropertyContext context){
		Optional annotation = Optional.absent();
		if(context.getAnnotatedElement().isPresent()) {
			annotation = annotation.or(ApiModelProperties.findApiModePropertyAnnotation(context.getAnnotatedElement().get()));
		}
		if(context.getBeanPropertyDefinition().isPresent()) {
			annotation = annotation.or(Annotations.findPropertyAnnotation(context.getBeanPropertyDefinition().get(),ApiModelProperty.class));
		}
		// 没有@ApiModelProperty或者notes属性没值则直接返回
		if(!annotation.isPresent() || StringUtils.isBlank((annotation.get()).notes())) {
			return;
		}
		Class enumType;
		try {
			enumType = Class.forName((annotation.get()).notes().replaceAll("/","."));
		} catch(ClassNotFoundException e) {
			// 若转换失败,直接忽略,不阻塞流程
			log.warn(e.getMessage());
			return;
		}
		Object[] subItemRecords = null;
		if(Enum.class.isAssignableFrom(enumType)) {
			subItemRecords  = rawPrimaryType.getEnumConstants();
		}
		if(subItemRecords  == null){
			return;
		}
		final List displayValues = Arrays.stream(subItemRecords)
		.filter(Objects::nonNull)
		.map(Objects::toString)
		.collect(Collectors.toList());
		String joinText = " (" + String.join("; ",displayValues) + ")"";
		try {
			Field mField = ModelPropertyBuilder.class.getDeclaredField("description");
			mField.setAccessible(true);
			joinText = mField.get(context.getBuilder()) + joinText;
		}catch(Exception e){
			log.error(e.getMessage());
		}
		// 枚举固定为int类型
		final ResolvedType resolvedType = context.getResolver().resolve(Integer.class);
		context.getBuilder().description(joinText).type(resolvedType);
	}

	// Swagger2还需其他一切配置,此处不再赘述
}

实际使用时:

@Data
@ApiModel(value= "TestQuery",description="qwe")
public class TestQuery {
	
	@ApimodelProperty(value="枚举",notes="com/xxx/xx/TestEnum")
	private TestEnum testEnum;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322488.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号