Skip to content

Commit f93a1fd

Browse files
author
bnasslahsen
committed
Improve support of HttpEntity on webflux. Fixes #280
1 parent ba6da56 commit f93a1fd

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

Diff for: springdoc-openapi-webflux-core/src/main/java/org/springdoc/core/ResponseBuilder.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -23,31 +23,33 @@ protected Schema calculateSchemaFromParameterizedType(Components components, Par
2323
JsonView jsonView) {
2424
Schema schemaN = null;
2525
if (Mono.class.getName().contentEquals(parameterizedType.getRawType().getTypeName())) {
26-
if (parameterizedType.getActualTypeArguments()[0] instanceof ParameterizedType && ResponseEntity.class
27-
.getName().contentEquals(((ParameterizedType) parameterizedType.getActualTypeArguments()[0])
28-
.getRawType().getTypeName())) {
26+
if (parameterizedType.getActualTypeArguments()[0] instanceof ParameterizedType && isResponseTypeToIgnore(((ParameterizedType) parameterizedType.getActualTypeArguments()[0])
27+
.getRawType().getTypeName())) {
2928
ParameterizedType parameterizedTypeNew = (ParameterizedType) parameterizedType
3029
.getActualTypeArguments()[0];
3130
schemaN = calculateSchemaParameterizedType(components, parameterizedTypeNew, jsonView);
3231
} else {
3332
schemaN = calculateSchemaParameterizedType(components, parameterizedType, jsonView);
3433
}
3534
} else if (Flux.class.getName().contentEquals(parameterizedType.getRawType().getTypeName())) {
36-
if (parameterizedType.getActualTypeArguments()[0] instanceof ParameterizedType && ResponseEntity.class
37-
.getName().contentEquals(((ParameterizedType) parameterizedType.getActualTypeArguments()[0])
38-
.getRawType().getTypeName())) {
35+
if (parameterizedType.getActualTypeArguments()[0] instanceof ParameterizedType && isResponseTypeToIgnore(((ParameterizedType) parameterizedType.getActualTypeArguments()[0])
36+
.getRawType().getTypeName())) {
3937
ParameterizedType parameterizedTypeNew = (ParameterizedType) parameterizedType
4038
.getActualTypeArguments()[0];
4139
schemaN = calculateFluxSchema(components, parameterizedTypeNew, jsonView);
4240
} else {
4341
schemaN = calculateFluxSchema(components, parameterizedType, jsonView);
4442
}
45-
} else if (ResponseEntity.class.getName().contentEquals(parameterizedType.getRawType().getTypeName()) || HttpEntity.class.getName().contentEquals(parameterizedType.getRawType().getTypeName())) {
43+
} else if (isResponseTypeToIgnore(parameterizedType.getRawType().getTypeName())) {
4644
schemaN = calculateSchemaParameterizedType(components, parameterizedType, jsonView);
4745
}
4846
return schemaN;
4947
}
5048

49+
private boolean isResponseTypeToIgnore(String typeName) {
50+
return ResponseEntity.class.getName().contentEquals(typeName) || HttpEntity.class.getName().contentEquals(typeName);
51+
}
52+
5153
private Schema calculateFluxSchema(Components components, ParameterizedType parameterizedType, JsonView jsonView) {
5254
Schema itemsSchema = SpringDocAnnotationsUtils.extractSchema(components, parameterizedType.getActualTypeArguments()[0], jsonView);
5355
return new ArraySchema().items(itemsSchema);

Diff for: springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app5/HelloController.java

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package test.org.springdoc.api.app5;
22

3+
import org.springframework.http.HttpEntity;
34
import org.springframework.http.MediaType;
5+
import org.springframework.web.bind.annotation.GetMapping;
46
import org.springframework.web.bind.annotation.PostMapping;
57
import org.springframework.web.bind.annotation.RequestBody;
68
import org.springframework.web.bind.annotation.RestController;
@@ -14,4 +16,9 @@ public Mono<Tweet> postNotWorks(@RequestBody Mono<Tweet> tweet) {
1416
return tweet;
1517
}
1618

19+
@GetMapping("/test")
20+
public Mono<HttpEntity<String>> demo2() {
21+
return null;
22+
}
23+
1724
}

Diff for: springdoc-openapi-webflux-core/src/test/resources/results/app5.json

+20
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,26 @@
4343
}
4444
}
4545
}
46+
},
47+
"/test": {
48+
"get": {
49+
"tags": [
50+
"hello-controller"
51+
],
52+
"operationId": "demo2",
53+
"responses": {
54+
"200": {
55+
"description": "default response",
56+
"content": {
57+
"*/*": {
58+
"schema": {
59+
"type": "string"
60+
}
61+
}
62+
}
63+
}
64+
}
65+
}
4666
}
4767
},
4868
"components": {

0 commit comments

Comments
 (0)