Skip to content

Commit 70461c0

Browse files
committed
add includeHttpRequestContext additional property defaulting to "true" for reactive and "false" for blocking
1 parent 9591118 commit 70461c0

4 files changed

Lines changed: 53 additions & 8 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ public class SpringCodegen extends AbstractJavaCodegen
9393
public static final String GENERATE_GENERIC_RESPONSE_ENTITY = "generateGenericResponseEntity";
9494
public static final String USE_ENUM_CASE_INSENSITIVE = "useEnumCaseInsensitive";
9595
public static final String USE_SPRING_BOOT3 = "useSpringBoot3";
96+
public static final String INCLUDE_HTTP_REQUEST_CONTEXT = "includeHttpRequestContext";
9697
public static final String REQUEST_MAPPING_OPTION = "requestMappingMode";
9798
public static final String USE_REQUEST_MAPPING_ON_CONTROLLER = "useRequestMappingOnController";
9899
public static final String USE_REQUEST_MAPPING_ON_INTERFACE = "useRequestMappingOnInterface";
@@ -154,6 +155,12 @@ public enum RequestMappingMode {
154155
@Setter protected boolean useEnumCaseInsensitive = false;
155156
@Getter @Setter
156157
protected boolean useSpringBoot3 = false;
158+
@Getter @Setter
159+
private Boolean includeHttpRequestContext = null;
160+
@Getter
161+
private final boolean defaultIncludeHttpRequestContextForReactive = true;
162+
@Getter
163+
private final boolean defaultIncludeHttpRequestContextForBlocking = false;
157164
protected boolean generatedConstructorWithRequiredArgs = true;
158165
@Getter @Setter
159166
protected RequestMappingMode requestMappingMode = RequestMappingMode.controller;
@@ -278,6 +285,9 @@ public SpringCodegen() {
278285
cliOptions.add(CliOption.newBoolean(USE_SPRING_BOOT3,
279286
"Generate code and provide dependencies for use with Spring Boot 3.x. (Use jakarta instead of javax in imports). Enabling this option will also enable `useJakartaEe`.",
280287
useSpringBoot3));
288+
cliOptions.add(CliOption.newBoolean(INCLUDE_HTTP_REQUEST_CONTEXT,
289+
"Whether to include HttpServletRequest (blocking) or ServerWebExchange (reactive) as additional parameter in generated methods. Defaults to 'true' for reactive and 'false' for blocking.",
290+
defaultIncludeHttpRequestContextForBlocking));
281291
cliOptions.add(CliOption.newBoolean(GENERATE_CONSTRUCTOR_WITH_REQUIRED_ARGS,
282292
"Whether to generate constructors with required args for models",
283293
generatedConstructorWithRequiredArgs));
@@ -429,6 +439,22 @@ public void processOpts() {
429439
convertPropertyToBooleanAndWriteBack(REACTIVE, this::setReactive);
430440
convertPropertyToBooleanAndWriteBack(SSE, this::setSse);
431441
}
442+
if (additionalProperties.containsKey(INCLUDE_HTTP_REQUEST_CONTEXT)) {
443+
convertPropertyToBooleanAndWriteBack(INCLUDE_HTTP_REQUEST_CONTEXT, this::setIncludeHttpRequestContext);
444+
}
445+
//set default value for includeHttpRequestContext based on reactive/blocking
446+
if (includeHttpRequestContext == null) {
447+
if (this.reactive) {
448+
//default to true for reactive
449+
this.setIncludeHttpRequestContext(this.isDefaultIncludeHttpRequestContextForReactive());
450+
LOGGER.info("Defaulting {} to '{}' for reactive", INCLUDE_HTTP_REQUEST_CONTEXT, this.isDefaultIncludeHttpRequestContextForReactive());
451+
} else {
452+
//default to false for blocking
453+
this.setIncludeHttpRequestContext(this.isDefaultIncludeHttpRequestContextForBlocking());
454+
LOGGER.info("Defaulting {} to '{}' for blocking", INCLUDE_HTTP_REQUEST_CONTEXT, this.isDefaultIncludeHttpRequestContextForBlocking());
455+
}
456+
additionalProperties.put(INCLUDE_HTTP_REQUEST_CONTEXT, this.getIncludeHttpRequestContext());
457+
}
432458

433459
convertPropertyToStringAndWriteBack(RESPONSE_WRAPPER, this::setResponseWrapper);
434460
convertPropertyToBooleanAndWriteBack(USE_TAGS, this::setUseTags);

modules/openapi-generator/src/main/resources/JavaSpring/api.mustache

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,15 @@ import org.springframework.web.context.request.NativeWebRequest;
5858
{{/isDelegate}}
5959
{{/jdk8-default-interface}}
6060
import org.springframework.web.multipart.MultipartFile;
61+
{{#includeHttpRequestContext}}
6162
{{#reactive}}
6263
import org.springframework.web.server.ServerWebExchange;
64+
{{/reactive}}
65+
{{^reactive}}
66+
import {{javaxPackage}}.servlet.http.HttpServletRequest;
67+
{{/reactive}}
68+
{{/includeHttpRequestContext}}
69+
{{#reactive}}
6370
import reactor.core.publisher.Flux;
6471
import reactor.core.publisher.Mono;
6572
import org.springframework.http.codec.multipart.Part;
@@ -270,24 +277,24 @@ public interface {{classname}} {
270277
{{/vendorExtensions.x-sse}}
271278
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{>responseType}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}(
272279
{{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}},
273-
{{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}},
274-
{{/hasParams}}{{#swagger2AnnotationLibrary}}@Parameter(hidden = true){{/swagger2AnnotationLibrary}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}},
280+
{{/-last}}{{/allParams}}{{#includeHttpRequestContext}}{{#hasParams}},
281+
{{/hasParams}}{{#swagger2AnnotationLibrary}}@Parameter(hidden = true){{/swagger2AnnotationLibrary}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final {{#reactive}}ServerWebExchange exchange{{/reactive}}{{^reactive}}HttpServletRequest request{{/reactive}}{{/includeHttpRequestContext}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}},
275282
{{/hasParams}}{{^hasParams}}{{#reactive}},{{/reactive}}{{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore {{/springFoxDocumentationProvider}}{{#springDocDocumentationProvider}}@ParameterObject {{/springDocDocumentationProvider}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}{{#vendorExtensions.x-spring-provide-args}}{{#hasParams}},
276283
{{/hasParams}}{{^hasParams}}{{#reactive}},{{/reactive}}{{/hasParams}}{{#swagger2AnnotationLibrary}}@Parameter(hidden = true){{/swagger2AnnotationLibrary}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} {{{.}}}{{^hasParams}}{{^-last}}{{^reactive}},{{/reactive}}
277284
{{/-last}}{{/hasParams}}{{/vendorExtensions.x-spring-provide-args}}
278285
){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
279286
{{#delegate-method}}
280-
{{^isVoid}}return {{/isVoid}}{{#isVoid}}{{#useResponseEntity}}return {{/useResponseEntity}}{{^useResponseEntity}}{{#reactive}}return {{/reactive}}{{/useResponseEntity}}{{/isVoid}}{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}pageable{{/vendorExtensions.x-spring-paginated}});
287+
{{^isVoid}}return {{/isVoid}}{{#isVoid}}{{#useResponseEntity}}return {{/useResponseEntity}}{{^useResponseEntity}}{{#reactive}}return {{/reactive}}{{/useResponseEntity}}{{/isVoid}}{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#includeHttpRequestContext}}{{#hasParams}}, {{/hasParams}}{{#reactive}}exchange{{/reactive}}{{^reactive}}request{{/reactive}}{{/includeHttpRequestContext}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}pageable{{/vendorExtensions.x-spring-paginated}});
281288
}
282289

283290
// Override this method
284-
{{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{>responseType}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{>optionalDataType}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}} {
291+
{{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{>responseType}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{>optionalDataType}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#includeHttpRequestContext}}{{#hasParams}}, {{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}} final {{#reactive}}ServerWebExchange exchange{{/reactive}}{{^reactive}}HttpServletRequest request{{/reactive}}{{/includeHttpRequestContext}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}{{#springFoxDocumentationProvider}}@ApiIgnore{{/springFoxDocumentationProvider}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}} {
285292
{{/delegate-method}}
286293
{{^isDelegate}}
287294
{{>methodBody}}{{! prevent indent}}
288295
{{/isDelegate}}
289296
{{#isDelegate}}
290-
{{^isVoid}}return {{/isVoid}}{{#isVoid}}{{#useResponseEntity}}return {{/useResponseEntity}}{{^useResponseEntity}}{{#reactive}}return {{/reactive}}{{/useResponseEntity}}{{/isVoid}}getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}pageable{{/vendorExtensions.x-spring-paginated}});
297+
{{^isVoid}}return {{/isVoid}}{{#isVoid}}{{#useResponseEntity}}return {{/useResponseEntity}}{{^useResponseEntity}}{{#reactive}}return {{/reactive}}{{/useResponseEntity}}{{/isVoid}}getDelegate().{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#includeHttpRequestContext}}{{#hasParams}}, {{/hasParams}}{{#reactive}}exchange{{/reactive}}{{^reactive}}request{{/reactive}}{{/includeHttpRequestContext}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}pageable{{/vendorExtensions.x-spring-paginated}});
291298
{{/isDelegate}}
292299
}{{/jdk8-default-interface}}
293300

modules/openapi-generator/src/main/resources/JavaSpring/apiDelegate.mustache

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@ import org.springframework.http.ResponseEntity;
99
{{/useResponseEntity}}
1010
import org.springframework.web.context.request.NativeWebRequest;
1111
import org.springframework.web.multipart.MultipartFile;
12+
{{#includeHttpRequestContext}}
1213
{{#reactive}}
1314
import org.springframework.web.server.ServerWebExchange;
15+
{{/reactive}}
16+
{{^reactive}}
17+
import {{javaxPackage}}.servlet.http.HttpServletRequest;
18+
{{/reactive}}
19+
{{/includeHttpRequestContext}}
20+
{{#reactive}}
1421
import reactor.core.publisher.Flux;
1522
import reactor.core.publisher.Mono;
1623
import org.springframework.http.codec.multipart.Part;
@@ -71,8 +78,8 @@ public interface {{classname}}Delegate {
7178
@Deprecated
7279
{{/isDeprecated}}
7380
{{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{>responseType}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{>optionalDataType}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}{{#isFormParam}}MultipartFile{{/isFormParam}}{{^isFormParam}}{{>optionalDataType}}{{/isFormParam}}{{#isArray}}>{{/isArray}}{{/reactive}}{{/isFile}} {{paramName}}{{^-last}},
74-
{{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}},
75-
{{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
81+
{{/-last}}{{/allParams}}{{#includeHttpRequestContext}}{{#hasParams}},
82+
{{/hasParams}}{{#reactive}}ServerWebExchange exchange{{/reactive}}{{^reactive}}HttpServletRequest request{{/reactive}}{{/includeHttpRequestContext}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}}, {{/hasParams}}{{^hasParams}}{{#reactive}}, {{/reactive}}{{/hasParams}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
7683
{{>methodBody}}{{! prevent indent}}
7784
}{{/jdk8-default-interface}}
7885

modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/api.mustache

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ import org.springframework.web.bind.annotation.*;
1717
import org.springframework.web.service.annotation.*;
1818
import org.springframework.web.multipart.MultipartFile;
1919
{{#reactive}}
20+
{{#useBeanValidation}}
21+
import {{javaxPackage}}.validation.Valid;
22+
import {{javaxPackage}}.validation.constraints.*;
23+
{{^useSpringBuiltInValidation}}import org.springframework.validation.annotation.Validated;{{/useSpringBuiltInValidation}}
24+
{{/useBeanValidation}}
2025

2126
import org.springframework.http.codec.multipart.Part;
2227
import reactor.core.publisher.Flux;
@@ -30,7 +35,7 @@ import {{javaxPackage}}.annotation.Generated;
3035

3136

3237
{{>generatedAnnotation}}
33-
38+
{{#useBeanValidation}}{{^useSpringBuiltInValidation}}@Validated{{/useSpringBuiltInValidation}}{{/useBeanValidation}}
3439
{{#operations}}
3540
public interface {{classname}} {
3641
{{#operation}}

0 commit comments

Comments
 (0)