标签:for tor web bean mod 字段 eva ini string
在其它两篇文章中,已经解决的自定义枚举在MyBatis以及Rest接口的转换,但是在Springfox中还存在问题,不能使用code来作为api。本文通过扩展Springfox,实现了对自定义枚举的良好支持。
ps: 枚举的定义参见 自定义枚举 --- MyBatis字段映射
存在2个问题
CodedEnum
的定义请参见其他文章)实现ModelPropertyBuilderPlugin
接口,
@Component public class CodedEnumPropertyPlugin 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)); } final Class<?> rawPrimaryType = context.getBeanPropertyDefinition().get().getRawPrimaryType(); //过滤得到目标类型 if (annotation.isPresent() && CodedEnum.class.isAssignableFrom(rawPrimaryType)) { //获取CodedEnum的code值 CodedEnum[] values = (CodedEnum[]) rawPrimaryType.getEnumConstants(); final List<String> displayValues = Arrays.stream(values).map(codedEnum -> Integer.toString(codedEnum.getCode())).collect(Collectors.toList()); final AllowableListValues allowableListValues = new AllowableListValues(displayValues, rawPrimaryType.getTypeName()); //固定设置为int类型 final ResolvedType resolvedType = context.getResolver().resolve(int.class); context.getBuilder().allowableValues(allowableListValues).type(resolvedType); } } @Override public boolean supports(DocumentationType documentationType) { return true; } }
标签:for tor web bean mod 字段 eva ini string
原文地址:https://www.cnblogs.com/softidea/p/11025735.html