OpenApi文档与spring-doc结合ResponseBodyAdvice下正确显示返回类型
Daniel_Wu | 300 |
2023-09-27
@Slf4j
@Component
public class CustomGenericResponseService extends GenericResponseService {
/**
* Instantiates a new Generic response builder.
*
* @param operationService the operation builder
* @param returnTypeParsers the return type parsers
* @param springDocConfigProperties the spring doc config properties
* @param propertyResolverUtils the property resolver utils
*/
public CustomGenericResponseService(OperationService operationService, List<ReturnTypeParser> returnTypeParsers, SpringDocConfigProperties springDocConfigProperties, PropertyResolverUtils propertyResolverUtils) {
super(operationService, returnTypeParsers, springDocConfigProperties, propertyResolverUtils);
log.debug("==========CustomGenericResponseService==========");
}
/**
* 扩展原来的方法,修改接口返回类型为真实类型
*
* @param components 组件
* @param annotations 注释
* @param methodProduces 方法生产
* @param jsonView json视图
* @param returnType 返回类型
* @return {@link Content}
*/
@Override
public Content buildContent(Components components, Annotation[] annotations, String[] methodProduces, JsonView jsonView, Type returnType) {
ResolvableType resolvableType = ResolvableType.forType(returnType);
if (!isVoid(returnType) && resolvableType.getRawClass() != ApiResult.class) {
returnType = ResolvableType.forClassWithGenerics(ApiResult.class, resolvableType).getType();
}
return super.buildContent(components, annotations, methodProduces, jsonView, returnType);
}
private boolean isVoid(Type returnType) {
boolean result = false;
if (!Void.TYPE.equals(returnType) && !Void.class.equals(returnType)) {
if (returnType instanceof ParameterizedType) {
Type[] types = ((ParameterizedType)returnType).getActualTypeArguments();
if (types != null && ConverterUtils.isResponseTypeWrapper(ResolvableType.forType(returnType).getRawClass())) {
result = this.isVoid(types[0]);
}
}
} else {
result = true;
}
return result;
}
}
推荐指数:
真诚点赞 诚不我欺~