[Java] Extend JavaSpring apiClient.mustache with option to override contextId for FeignClient (#20943)

This commit is contained in:
Pavel 2025-03-22 04:36:30 +01:00 committed by GitHub
parent f3999109cb
commit 868074212a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
23 changed files with 27 additions and 20 deletions

View File

@ -99,6 +99,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|unhandledException|Declare operation methods to throw a generic exception and allow unhandled exceptions (useful for Spring `@ControllerAdvice` directives).| |false| |unhandledException|Declare operation methods to throw a generic exception and allow unhandled exceptions (useful for Spring `@ControllerAdvice` directives).| |false|
|useBeanValidation|Use BeanValidation API annotations| |true| |useBeanValidation|Use BeanValidation API annotations| |true|
|useEnumCaseInsensitive|Use `equalsIgnoreCase` when String for enum comparison| |false| |useEnumCaseInsensitive|Use `equalsIgnoreCase` when String for enum comparison| |false|
|useFeignClientContextId|Whether to generate Feign client with contextId parameter.| |true|
|useFeignClientUrl|Whether to generate Feign client with url parameter.| |true| |useFeignClientUrl|Whether to generate Feign client with url parameter.| |true|
|useJakartaEe|whether to use Jakarta EE namespace instead of javax| |false| |useJakartaEe|whether to use Jakarta EE namespace instead of javax| |false|
|useOneOfInterfaces|whether to use a java interface to describe a set of oneOf options, where each option is a class that implements the interface| |false| |useOneOfInterfaces|whether to use a java interface to describe a set of oneOf options, where each option is a class that implements the interface| |false|

View File

@ -92,6 +92,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|unhandledException|Declare operation methods to throw a generic exception and allow unhandled exceptions (useful for Spring `@ControllerAdvice` directives).| |false| |unhandledException|Declare operation methods to throw a generic exception and allow unhandled exceptions (useful for Spring `@ControllerAdvice` directives).| |false|
|useBeanValidation|Use BeanValidation API annotations| |true| |useBeanValidation|Use BeanValidation API annotations| |true|
|useEnumCaseInsensitive|Use `equalsIgnoreCase` when String for enum comparison| |false| |useEnumCaseInsensitive|Use `equalsIgnoreCase` when String for enum comparison| |false|
|useFeignClientContextId|Whether to generate Feign client with contextId parameter.| |true|
|useFeignClientUrl|Whether to generate Feign client with url parameter.| |true| |useFeignClientUrl|Whether to generate Feign client with url parameter.| |true|
|useJakartaEe|whether to use Jakarta EE namespace instead of javax| |false| |useJakartaEe|whether to use Jakarta EE namespace instead of javax| |false|
|useOneOfInterfaces|whether to use a java interface to describe a set of oneOf options, where each option is a class that implements the interface| |false| |useOneOfInterfaces|whether to use a java interface to describe a set of oneOf options, where each option is a class that implements the interface| |false|

View File

@ -66,6 +66,7 @@ public class SpringCodegen extends AbstractJavaCodegen
public static final String INTERFACE_ONLY = "interfaceOnly"; public static final String INTERFACE_ONLY = "interfaceOnly";
public static final String USE_FEIGN_CLIENT_URL = "useFeignClientUrl"; public static final String USE_FEIGN_CLIENT_URL = "useFeignClientUrl";
public static final String USE_FEIGN_CLIENT = "useFeignClient"; public static final String USE_FEIGN_CLIENT = "useFeignClient";
public static final String USE_FEIGN_CLIENT_CONTEXT_ID = "useFeignClientContextId";
public static final String DELEGATE_PATTERN = "delegatePattern"; public static final String DELEGATE_PATTERN = "delegatePattern";
public static final String SINGLE_CONTENT_TYPES = "singleContentTypes"; public static final String SINGLE_CONTENT_TYPES = "singleContentTypes";
public static final String VIRTUAL_SERVICE = "virtualService"; public static final String VIRTUAL_SERVICE = "virtualService";
@ -124,6 +125,7 @@ public class SpringCodegen extends AbstractJavaCodegen
@Setter protected boolean interfaceOnly = false; @Setter protected boolean interfaceOnly = false;
@Setter protected boolean useFeignClientUrl = true; @Setter protected boolean useFeignClientUrl = true;
@Setter protected boolean useFeignClientContextId = true;
@Setter protected boolean delegatePattern = false; @Setter protected boolean delegatePattern = false;
protected boolean delegateMethod = false; protected boolean delegateMethod = false;
@Setter protected boolean singleContentTypes = false; @Setter protected boolean singleContentTypes = false;
@ -200,6 +202,8 @@ public class SpringCodegen extends AbstractJavaCodegen
"Whether to generate only API interface stubs without the server files.", interfaceOnly)); "Whether to generate only API interface stubs without the server files.", interfaceOnly));
cliOptions.add(CliOption.newBoolean(USE_FEIGN_CLIENT_URL, cliOptions.add(CliOption.newBoolean(USE_FEIGN_CLIENT_URL,
"Whether to generate Feign client with url parameter.", useFeignClientUrl)); "Whether to generate Feign client with url parameter.", useFeignClientUrl));
cliOptions.add(CliOption.newBoolean(USE_FEIGN_CLIENT_CONTEXT_ID,
"Whether to generate Feign client with contextId parameter.", useFeignClientContextId));
cliOptions.add(CliOption.newBoolean(DELEGATE_PATTERN, cliOptions.add(CliOption.newBoolean(DELEGATE_PATTERN,
"Whether to generate the server files using the delegate pattern", delegatePattern)); "Whether to generate the server files using the delegate pattern", delegatePattern));
cliOptions.add(CliOption.newBoolean(SINGLE_CONTENT_TYPES, cliOptions.add(CliOption.newBoolean(SINGLE_CONTENT_TYPES,
@ -398,6 +402,7 @@ public class SpringCodegen extends AbstractJavaCodegen
convertPropertyToBooleanAndWriteBack(VIRTUAL_SERVICE, this::setVirtualService); convertPropertyToBooleanAndWriteBack(VIRTUAL_SERVICE, this::setVirtualService);
convertPropertyToBooleanAndWriteBack(INTERFACE_ONLY, this::setInterfaceOnly); convertPropertyToBooleanAndWriteBack(INTERFACE_ONLY, this::setInterfaceOnly);
convertPropertyToBooleanAndWriteBack(USE_FEIGN_CLIENT_URL, this::setUseFeignClientUrl); convertPropertyToBooleanAndWriteBack(USE_FEIGN_CLIENT_URL, this::setUseFeignClientUrl);
convertPropertyToBooleanAndWriteBack(USE_FEIGN_CLIENT_CONTEXT_ID, this::setUseFeignClientContextId);
convertPropertyToBooleanAndWriteBack(DELEGATE_PATTERN, this::setDelegatePattern); convertPropertyToBooleanAndWriteBack(DELEGATE_PATTERN, this::setDelegatePattern);
convertPropertyToBooleanAndWriteBack(SINGLE_CONTENT_TYPES, this::setSingleContentTypes); convertPropertyToBooleanAndWriteBack(SINGLE_CONTENT_TYPES, this::setSingleContentTypes);
convertPropertyToBooleanAndWriteBack(SKIP_DEFAULT_INTERFACE, this::setSkipDefaultInterface); convertPropertyToBooleanAndWriteBack(SKIP_DEFAULT_INTERFACE, this::setSkipDefaultInterface);

View File

@ -3,6 +3,6 @@ package {{package}};
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import {{configPackage}}.ClientConfiguration; import {{configPackage}}.ClientConfiguration;
@FeignClient(name="${{openbrace}}{{classVarName}}.name:{{classVarName}}{{closebrace}}", {{#useFeignClientUrl}}url="${{openbrace}}{{classVarName}}.url:{{basePath}}{{closebrace}}", {{/useFeignClientUrl}}configuration = ClientConfiguration.class) @FeignClient(name="${{openbrace}}{{classVarName}}.name:{{classVarName}}{{closebrace}}", {{#useFeignClientContextId}}contextId="${{openbrace}}{{classVarName}}.contextId:${{openbrace}}{{classVarName}}.name{{closebrace}}{{closebrace}}",{{/useFeignClientContextId}} {{#useFeignClientUrl}}url="${{openbrace}}{{classVarName}}.url:{{basePath}}{{closebrace}}",{{/useFeignClientUrl}} configuration = ClientConfiguration.class)
public interface {{classname}}Client extends {{classname}} { public interface {{classname}}Client extends {{classname}} {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${some.name:some}", url="${some.url:http://localhost}", configuration = ClientConfiguration.class) @FeignClient(name="${some.name:some}", contextId="${some.contextId:${some.name}}", url="${some.url:http://localhost}", configuration = ClientConfiguration.class)
public interface SomeApiClient extends SomeApi { public interface SomeApiClient extends SomeApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${pet.name:pet}", configuration = ClientConfiguration.class) @FeignClient(name="${pet.name:pet}", contextId="${pet.contextId:${pet.name}}", configuration = ClientConfiguration.class)
public interface PetApiClient extends PetApi { public interface PetApiClient extends PetApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${store.name:store}", configuration = ClientConfiguration.class) @FeignClient(name="${store.name:store}", contextId="${store.contextId:${store.name}}", configuration = ClientConfiguration.class)
public interface StoreApiClient extends StoreApi { public interface StoreApiClient extends StoreApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${user.name:user}", configuration = ClientConfiguration.class) @FeignClient(name="${user.name:user}", contextId="${user.contextId:${user.name}}", configuration = ClientConfiguration.class)
public interface UserApiClient extends UserApi { public interface UserApiClient extends UserApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${pet.name:pet}", contextId="${pet.contextId:${pet.name}}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface PetApiClient extends PetApi { public interface PetApiClient extends PetApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${store.name:store}", contextId="${store.contextId:${store.name}}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface StoreApiClient extends StoreApi { public interface StoreApiClient extends StoreApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${user.name:user}", contextId="${user.contextId:${user.name}}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface UserApiClient extends UserApi { public interface UserApiClient extends UserApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${pet.name:pet}", contextId="${pet.contextId:${pet.name}}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface PetApiClient extends PetApi { public interface PetApiClient extends PetApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${store.name:store}", contextId="${store.contextId:${store.name}}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface StoreApiClient extends StoreApi { public interface StoreApiClient extends StoreApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${user.name:user}", contextId="${user.contextId:${user.name}}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface UserApiClient extends UserApi { public interface UserApiClient extends UserApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${pet.name:pet}", contextId="${pet.contextId:${pet.name}}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface PetApiClient extends PetApi { public interface PetApiClient extends PetApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${store.name:store}", contextId="${store.contextId:${store.name}}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface StoreApiClient extends StoreApi { public interface StoreApiClient extends StoreApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${user.name:user}", contextId="${user.contextId:${user.name}}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface UserApiClient extends UserApi { public interface UserApiClient extends UserApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${pet.name:pet}", contextId="${pet.contextId:${pet.name}}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface PetApiClient extends PetApi { public interface PetApiClient extends PetApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${store.name:store}", contextId="${store.contextId:${store.name}}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface StoreApiClient extends StoreApi { public interface StoreApiClient extends StoreApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${user.name:user}", contextId="${user.contextId:${user.name}}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface UserApiClient extends UserApi { public interface UserApiClient extends UserApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${pet.name:pet}", contextId="${pet.contextId:${pet.name}}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface PetApiClient extends PetApi { public interface PetApiClient extends PetApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${store.name:store}", contextId="${store.contextId:${store.name}}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface StoreApiClient extends StoreApi { public interface StoreApiClient extends StoreApi {
} }

View File

@ -3,6 +3,6 @@ package org.openapitools.api;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.openapitools.configuration.ClientConfiguration; import org.openapitools.configuration.ClientConfiguration;
@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class) @FeignClient(name="${user.name:user}", contextId="${user.contextId:${user.name}}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
public interface UserApiClient extends UserApi { public interface UserApiClient extends UserApi {
} }