refactor(web): 提升接口文档响应类型优化扩展性

This commit is contained in:
2024-08-29 19:42:44 +08:00
parent d3fa00d14c
commit 784a56fd4f
2 changed files with 18 additions and 6 deletions

View File

@@ -16,6 +16,7 @@
package top.continew.starter.web.autoconfigure.response; package top.continew.starter.web.autoconfigure.response;
import cn.hutool.core.util.ClassUtil;
import org.apache.commons.lang3.reflect.TypeUtils; import org.apache.commons.lang3.reflect.TypeUtils;
import org.springdoc.core.parsers.ReturnTypeParser; import org.springdoc.core.parsers.ReturnTypeParser;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
@@ -35,7 +36,13 @@ import java.lang.reflect.Type;
*/ */
public class ApiDocGlobalResponseHandler implements ReturnTypeParser { public class ApiDocGlobalResponseHandler implements ReturnTypeParser {
private static final Class<R> R_TYPE = R.class; private final GlobalResponseProperties globalResponseProperties;
private final Class<Object> responseClass;
public ApiDocGlobalResponseHandler(GlobalResponseProperties globalResponseProperties) {
this.globalResponseProperties = globalResponseProperties;
this.responseClass = ClassUtil.loadClass(globalResponseProperties.getResponseClassFullName());
}
/** /**
* 获取返回类型 * 获取返回类型
@@ -51,15 +58,15 @@ public class ApiDocGlobalResponseHandler implements ReturnTypeParser {
if (!DocUtils.hasRestControllerAnnotation(methodParameter.getContainingClass())) { if (!DocUtils.hasRestControllerAnnotation(methodParameter.getContainingClass())) {
return returnType; return returnType;
} }
// 如果为 R<T> 则直接返回 // 如果为响应类型,则直接返回
if (returnType.getTypeName().contains("top.continew.starter.web.model.R")) { if (returnType.getTypeName().contains(globalResponseProperties.getResponseClassFullName())) {
return returnType; return returnType;
} }
// 如果是 void类型则返回 R<Void> // 如果是 void类型则返回 R<Void>
if (returnType == void.class || returnType == Void.class) { if (returnType == void.class || returnType == Void.class) {
return TypeUtils.parameterize(R_TYPE, Void.class); return TypeUtils.parameterize(responseClass, Void.class);
} }
// 返回 R<T> // 返回 R<T>
return TypeUtils.parameterize(R_TYPE, returnType); return TypeUtils.parameterize(responseClass, returnType);
} }
} }

View File

@@ -50,6 +50,11 @@ import java.util.Locale;
public class GlobalResponseAutoConfiguration { public class GlobalResponseAutoConfiguration {
private static final Logger log = LoggerFactory.getLogger(GlobalResponseAutoConfiguration.class); private static final Logger log = LoggerFactory.getLogger(GlobalResponseAutoConfiguration.class);
private final GlobalResponseProperties globalResponseProperties;
public GlobalResponseAutoConfiguration(GlobalResponseProperties globalResponseProperties) {
this.globalResponseProperties = globalResponseProperties;
}
/** /**
* 全局异常处理 * 全局异常处理
@@ -151,7 +156,7 @@ public class GlobalResponseAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public ApiDocGlobalResponseHandler apiDocGlobalResponseHandler() { public ApiDocGlobalResponseHandler apiDocGlobalResponseHandler() {
return new ApiDocGlobalResponseHandler(); return new ApiDocGlobalResponseHandler(globalResponseProperties);
} }
@PostConstruct @PostConstruct