Skip to content

Commit 9e31a2c

Browse files
issue #2733 second change for only check response entity type
1 parent 534b7c5 commit 9e31a2c

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed

Diff for: springdoc-openapi-starter-common/src/main/java/org/springdoc/core/converters/ResponseSupportConverter.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import io.swagger.v3.oas.models.media.Schema;
3535
import io.swagger.v3.oas.models.media.StringSchema;
3636
import org.springdoc.core.providers.ObjectMapperProvider;
37+
import org.springframework.http.ResponseEntity;
3738

3839
import static org.springdoc.core.converters.ConverterUtils.isFluxTypeWrapper;
3940
import static org.springdoc.core.converters.ConverterUtils.isResponseTypeToIgnore;
@@ -65,12 +66,7 @@ public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterato
6566
if (javaType != null) {
6667
Class<?> cls = javaType.getRawClass();
6768
if (isResponseTypeWrapper(cls) && !isFluxTypeWrapper(cls)) {
68-
JavaType innerType = javaType.getBindings().getBoundType(0);
69-
if(javaType.getSuperClass() !=null
70-
&& javaType.getSuperClass().hasGenericTypes()
71-
&& isResponseTypeWrapper(javaType.getSuperClass().getRawClass())
72-
&& !Object.class.equals(javaType.getSuperClass().getBindings().getBoundType(0).getRawClass()))
73-
innerType = javaType.getSuperClass().getBindings().getBoundType(0);
69+
JavaType innerType = findResponseEntity(javaType).containedType(0);
7470
if (innerType == null)
7571
return new StringSchema();
7672
return context.resolve(new AnnotatedType(innerType)
@@ -83,4 +79,13 @@ else if (isResponseTypeToIgnore(cls))
8379
}
8480
return (chain.hasNext()) ? chain.next().resolve(type, context, chain) : null;
8581
}
82+
83+
private JavaType findResponseEntity(JavaType javaType){
84+
if(ResponseEntity.class.isAssignableFrom(javaType.getRawClass())){
85+
while (ResponseEntity.class != javaType.getRawClass())
86+
javaType = javaType.getSuperClass();
87+
}
88+
return javaType;
89+
}
90+
8691
}

Diff for: springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app227/HelloController.java

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121

2222
import test.org.springdoc.api.v30.app227.model.Item;
23+
import test.org.springdoc.api.v30.app227.wrapper.NoGenericWrapper;
2324
import test.org.springdoc.api.v30.app227.wrapper.ResponseEntityWrapper;
2425

2526
import org.springframework.http.HttpStatus;
@@ -34,4 +35,9 @@ public ResponseEntityWrapper<String> persons() {
3435
return new ResponseEntityWrapper<>(Item.fromPayload("1", "OK", "String"), HttpStatus.OK);
3536
}
3637

38+
@GetMapping("/persons2")
39+
public NoGenericWrapper persons2() {
40+
return new NoGenericWrapper(Item.fromPayload("1", "OK", "String"), HttpStatus.OK);
41+
}
42+
3743
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package test.org.springdoc.api.v30.app227.wrapper;
2+
3+
4+
import org.springframework.http.HttpStatusCode;
5+
import test.org.springdoc.api.v30.app227.model.Item;
6+
7+
public class NoGenericWrapper extends ResponseEntityWrapper<String> {
8+
public NoGenericWrapper(Item<String> body, HttpStatusCode status) {
9+
super(body, status);
10+
}
11+
}

Diff for: springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app227.json

+20
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@
3030
}
3131
}
3232
}
33+
},
34+
"/persons2": {
35+
"get": {
36+
"tags": [
37+
"hello-controller"
38+
],
39+
"operationId": "persons2",
40+
"responses": {
41+
"200": {
42+
"description": "OK",
43+
"content": {
44+
"*/*": {
45+
"schema": {
46+
"$ref": "#/components/schemas/ItemString"
47+
}
48+
}
49+
}
50+
}
51+
}
52+
}
3353
}
3454
},
3555
"components": {

0 commit comments

Comments
 (0)