Created by: logarithm
PR checklist
-
Read the contribution guidelines. -
Ran the shell script under ./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
. -
Filed the PR against the correct branch: master
,. Default:3.4.x
,4.0.x
master
. -
Copied the technical committee to review the pull request if your PR is targeting a particular programming language (Java technical committee: @bbdouglas @sreeshas @jfiala @lukoyanov @cbornet @jeff9finger).
Description of the PR
If for java spring-boot template generator we combine reactive
and interfaceOnly
properties then openapi generator generates incorrect code.
Example without fix:
default Mono<ResponseEntity<ResponseWrapper>> _methodName(@ApiParam(value = "" ) @Valid @RequestBody Mono<RequestWrapper> requestWrapper, ServerWebExchange exchange) {
return methodName(requestWrapper);
}
// Override this method
default Mono<ResponseEntity<ResponseWrapper>> methodName(RequestWrapper requestWrapper, ServerWebExchange exchange) {
Mono<Void> result = Mono.empty();
exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
result = ApiUtil.getExampleResponse(exchange, "");
break;
}
}
return result.then(Mono.empty());
}
There are multiple problems:
- Interface method passes incorrect parameter list to delegate.
- First parameter type of delegate method is incorrect.
After template fix applied:
default Mono<ResponseEntity<ResponseWrapper>> _methodName(@ApiParam(value = "" ) @Valid @RequestBody Mono<RequestWrapper> requestWrapper, ServerWebExchange exchange) {
return methodName(requestWrapper, exchange);
}
// Override this method
default Mono<ResponseEntity<ResponseWrapper>> methodName(Mono<RequestWrapper> requestWrapper, ServerWebExchange exchange) {
Mono<Void> result = Mono.empty();
exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
result = ApiUtil.getExampleResponse(exchange, "");
break;
}
}
return result.then(Mono.empty());
}