Swagger2枚举参数自动转换

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

@Configuration
@EnableSwagger2
@Slf4j
public class Swagger2Config implements ModelPropertyBuilderPlugin {
	
	@Override
	public void apply(ModelPropertyContext context){
		Optional<ApiModelProperty> 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<String> 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值