Skip to content

Commit 30bf1b0

Browse files
author
bnasslahsen
committed
code refactoring
1 parent 26d58f2 commit 30bf1b0

File tree

17 files changed

+65
-179
lines changed

17 files changed

+65
-179
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public abstract class AbstractRequestBuilder {
108108
PARAM_TYPES_TO_IGNORE.add(RequestAttribute.class);
109109
}
110110

111-
private final AbstractParameterBuilder parameterBuilder;
111+
private final GenericParameterBuilder parameterBuilder;
112112

113113
private final RequestBodyBuilder requestBodyBuilder;
114114

@@ -118,7 +118,7 @@ public abstract class AbstractRequestBuilder {
118118

119119
private final Optional<List<ParameterCustomizer>> parameterCustomizers;
120120

121-
protected AbstractRequestBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
121+
protected AbstractRequestBuilder(GenericParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
122122
OperationBuilder operationBuilder, Optional<List<OperationCustomizer>> operationCustomizers,
123123
Optional<List<ParameterCustomizer>> parameterCustomizers) {
124124
super();

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractParameterBuilder.java renamed to springdoc-openapi-common/src/main/java/org/springdoc/core/GenericParameterBuilder.java

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.lang.reflect.Method;
2424
import java.lang.reflect.ParameterizedType;
2525
import java.lang.reflect.Type;
26+
import java.lang.reflect.WildcardType;
27+
import java.util.ArrayList;
2628
import java.util.HashMap;
2729
import java.util.List;
2830
import java.util.Map;
@@ -49,17 +51,23 @@
4951

5052
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
5153
import org.springframework.core.annotation.AnnotationUtils;
54+
import org.springframework.http.codec.multipart.FilePart;
5255
import org.springframework.web.method.HandlerMethod;
56+
import org.springframework.web.multipart.MultipartFile;
5357

5458
@SuppressWarnings("rawtypes")
55-
public abstract class AbstractParameterBuilder {
59+
public class GenericParameterBuilder {
5660

5761
private final LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
58-
5962
private final IgnoredParameterAnnotations ignoredParameterAnnotations;
63+
private static final List<Class<?>> FILE_TYPES = new ArrayList<>();
6064

65+
static {
66+
FILE_TYPES.add(MultipartFile.class);
67+
FILE_TYPES.add(FilePart.class);
68+
}
6169

62-
public AbstractParameterBuilder(LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer, IgnoredParameterAnnotations ignoredParameterAnnotations) {
70+
public GenericParameterBuilder(LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer, IgnoredParameterAnnotations ignoredParameterAnnotations) {
6371
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
6472
this.ignoredParameterAnnotations = ignoredParameterAnnotations;
6573
}
@@ -235,7 +243,9 @@ public LocalVariableTableParameterNameDiscoverer getLocalSpringDocParameterNameD
235243
return localSpringDocParameterNameDiscoverer;
236244
}
237245

238-
protected abstract Schema calculateSchemaFromParameterizedType(Components components, Type returnType, JsonView jsonView);
246+
private Schema calculateSchemaFromParameterizedType(Components components, Type paramType, JsonView jsonView) {
247+
return SpringDocAnnotationsUtils.extractSchema(components, paramType, jsonView);
248+
}
239249

240250
private Schema extractFileSchema(String paramName, RequestBodyInfo requestBodyInfo) {
241251
Schema schemaN = getFileSchema(requestBodyInfo);
@@ -256,14 +266,28 @@ private Schema getFileSchema(RequestBodyInfo requestBodyInfo) {
256266
return schemaN;
257267
}
258268

259-
protected abstract boolean isFile(ParameterizedType parameterizedType);
269+
private boolean isFile(ParameterizedType parameterizedType) {
270+
Type type = parameterizedType.getActualTypeArguments()[0];
271+
if (MultipartFile.class.getName().equals(type.getTypeName())
272+
|| FilePart.class.getName().equals(type.getTypeName())) {
273+
return true;
274+
}
275+
else if (type instanceof WildcardType) {
276+
WildcardType wildcardType = (WildcardType) type;
277+
Type[] upperBounds = wildcardType.getUpperBounds();
278+
return MultipartFile.class.getName().equals(upperBounds[0].getTypeName());
279+
}
280+
return false;
281+
}
260282

261-
protected abstract boolean isFile(JavaType ct);
283+
private boolean isFile(JavaType ct) {
284+
return FILE_TYPES.stream().anyMatch(clazz -> clazz.isAssignableFrom(ct.getRawClass()));
285+
}
262286

263287
public boolean isFile(java.lang.reflect.Parameter parameter) {
264288
boolean result = false;
265289
Type type = parameter.getParameterizedType();
266-
JavaType javaType = constructType(parameter.getType());
290+
JavaType javaType = this.constructType(type);
267291
if (isFile(javaType)) {
268292
result = true;
269293
}

springdoc-openapi-common/src/main/java/org/springdoc/core/GenericResponseBuilder.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@
4545
import org.apache.commons.lang3.StringUtils;
4646

4747
import org.springframework.core.annotation.AnnotatedElementUtils;
48-
import org.springframework.http.HttpEntity;
4948
import org.springframework.http.HttpStatus;
5049
import org.springframework.http.MediaType;
51-
import org.springframework.http.ResponseEntity;
5250
import org.springframework.util.CollectionUtils;
5351
import org.springframework.web.bind.annotation.ExceptionHandler;
5452
import org.springframework.web.bind.annotation.RequestMapping;
@@ -258,9 +256,6 @@ private Schema<?> calculateSchema(Components components, Type returnType, JsonVi
258256
// if void, no content
259257
return null;
260258
}
261-
else if (ResponseEntity.class.getName().equals(returnType.getTypeName()) || HttpEntity.class.getName().equals(returnType.getTypeName())) {
262-
schemaN = AnnotationsUtils.resolveSchemaFromType(String.class, null, jsonView);
263-
}
264259
if (schemaN == null) {
265260
schemaN = SpringDocAnnotationsUtils.extractSchema(components, returnType, jsonView);
266261
}

springdoc-openapi-common/src/main/java/org/springdoc/core/OpenAPIBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ private void resolveProperty(Supplier<String> getProperty, Consumer<String> setP
296296
}
297297

298298
private void calculateSecuritySchemes(Components components) {
299-
// Look for OpenAPIDefinition in a spring managed bean
299+
// Look for SecurityScheme in a spring managed bean
300300
Map<String, Object> securitySchemeBeans = context
301301
.getBeansWithAnnotation(io.swagger.v3.oas.annotations.security.SecurityScheme.class);
302302
if (securitySchemeBeans.size() > 0) {
@@ -308,7 +308,7 @@ private void calculateSecuritySchemes(Components components) {
308308
}
309309
}
310310

311-
// Look for OpenAPIDefinition in the spring classpath
311+
// Look for SecurityScheme in the spring classpath
312312
else {
313313
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(
314314
false);

springdoc-openapi-common/src/main/java/org/springdoc/core/OperationBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959

6060
public class OperationBuilder {
6161

62-
private final AbstractParameterBuilder parameterBuilder;
62+
private final GenericParameterBuilder parameterBuilder;
6363

6464
private final RequestBodyBuilder requestBodyBuilder;
6565

@@ -69,7 +69,7 @@ public class OperationBuilder {
6969

7070
private final PropertyResolverUtils propertyResolverUtils;
7171

72-
public OperationBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
72+
public OperationBuilder(GenericParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
7373
SecurityParser securityParser, OpenAPIBuilder openAPIBuilder, PropertyResolverUtils propertyResolverUtils) {
7474
super();
7575
this.parameterBuilder = parameterBuilder;

springdoc-openapi-common/src/main/java/org/springdoc/core/RequestBodyBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@
3434

3535
public class RequestBodyBuilder {
3636

37-
private final AbstractParameterBuilder parameterBuilder;
37+
private final GenericParameterBuilder parameterBuilder;
3838

39-
public RequestBodyBuilder(AbstractParameterBuilder parameterBuilder) {
39+
public RequestBodyBuilder(GenericParameterBuilder parameterBuilder) {
4040
super();
4141
this.parameterBuilder = parameterBuilder;
4242
}

springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public ModelConverterRegistrar modelConverterRegistrar(Optional<List<ModelConver
8686

8787
@Bean
8888
@ConditionalOnWebApplication
89-
public OperationBuilder operationBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
89+
public OperationBuilder operationBuilder(GenericParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
9090
SecurityParser securityParser, OpenAPIBuilder openAPIBuilder, PropertyResolverUtils propertyResolverUtils) {
9191
return new OperationBuilder(parameterBuilder, requestBodyBuilder,
9292
securityParser, openAPIBuilder, propertyResolverUtils);
@@ -99,7 +99,7 @@ public PropertyResolverUtils propertyResolverUtils(ConfigurableBeanFactory facto
9999

100100
@Bean
101101
@ConditionalOnWebApplication
102-
public RequestBodyBuilder requestBodyBuilder(AbstractParameterBuilder parameterBuilder) {
102+
public RequestBodyBuilder requestBodyBuilder(GenericParameterBuilder parameterBuilder) {
103103
return new RequestBodyBuilder(parameterBuilder);
104104
}
105105

@@ -113,6 +113,11 @@ public GenericReturnTypeParser genericReturnTypeParser() {
113113
return new GenericReturnTypeParser();
114114
}
115115

116+
@Bean
117+
public GenericParameterBuilder parameterBuilder(LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer, IgnoredParameterAnnotations ignoredParameterAnnotations) {
118+
return new GenericParameterBuilder(localSpringDocParameterNameDiscoverer, ignoredParameterAnnotations);
119+
}
120+
116121
static class ConditionOnCacheOrGroupedOpenApi extends AnyNestedCondition {
117122

118123
ConditionOnCacheOrGroupedOpenApi() {

springdoc-openapi-common/src/main/java/org/springdoc/core/converters/ResponseSupportConverter.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import io.swagger.v3.core.converter.ModelConverterContext;
2828
import io.swagger.v3.core.util.Json;
2929
import io.swagger.v3.oas.models.media.Schema;
30+
import io.swagger.v3.oas.models.media.StringSchema;
3031

3132
import static org.springdoc.core.converters.ConverterUtils.isResponseTypeWrapper;
3233

@@ -39,10 +40,14 @@ public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterato
3940
Class<?> cls = javaType.getRawClass();
4041
if (isResponseTypeWrapper(cls)) {
4142
JavaType innerType = javaType.getBindings().getBoundType(0);
42-
if (innerType.getBindings() != null && isResponseTypeWrapper(innerType.getRawClass())) {
43+
if (innerType == null) {
44+
return new StringSchema();
45+
}
46+
else if (innerType.getBindings() != null && isResponseTypeWrapper(innerType.getRawClass())) {
4347
type = new AnnotatedType(innerType).jsonViewAnnotation(type.getJsonViewAnnotation()).resolveAsRef(true);
4448
return this.resolve(type, context, chain);
45-
}else {
49+
}
50+
else {
4651
type = new AnnotatedType(innerType).jsonViewAnnotation(type.getJsonViewAnnotation()).resolveAsRef(true);
4752
}
4853
}

springdoc-openapi-kotlin/src/main/java/org/springdoc/core/KotlinCoroutinesRequestBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class KotlinCoroutinesRequestBuilder extends AbstractRequestBuilder {
3232
AbstractRequestBuilder.addResponseWrapperToIgnore(Continuation.class);
3333
}
3434

35-
public KotlinCoroutinesRequestBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
35+
public KotlinCoroutinesRequestBuilder(GenericParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
3636
OperationBuilder operationBuilder, Optional<List<OperationCustomizer>> customizers,
3737
Optional<List<ParameterCustomizer>> parameterCustomizers) {
3838
super(parameterBuilder, requestBodyBuilder, operationBuilder, customizers, parameterCustomizers);

springdoc-openapi-kotlin/src/main/java/org/springdoc/core/SpringDocKotlinConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class SpringDocKotlinConfiguration {
3737

3838
@Bean
3939
@Primary
40-
KotlinCoroutinesRequestBuilder kotlinCoroutinesRequestBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
40+
KotlinCoroutinesRequestBuilder kotlinCoroutinesRequestBuilder(GenericParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
4141
OperationBuilder operationBuilder, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<ParameterCustomizer>> parameterCustomizers) {
4242
return new KotlinCoroutinesRequestBuilder(parameterBuilder, requestBodyBuilder,
4343
operationBuilder, operationCustomizers, parameterCustomizers);

0 commit comments

Comments
 (0)