Skip to content

Commit 753330d

Browse files
[kotlin-spring] Revert nested property placeholder in @RequestMapping that Spring cannot resolve (#22625)
1 parent 8a82a3e commit 753330d

File tree

44 files changed

+52
-107
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+52
-107
lines changed

modules/openapi-generator/src/main/resources/kotlin-spring/api.mustache

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ import org.springframework.validation.annotation.Validated
3030
{{/useBeanValidation}}
3131
import org.springframework.web.context.request.NativeWebRequest
3232
import org.springframework.beans.factory.annotation.Autowired
33-
{{#useRequestMappingOnController}}
34-
import {{#apiPackage}}{{.}}.{{/apiPackage}}{{classname}}Controller.Companion.BASE_PATH
35-
{{/useRequestMappingOnController}}
3633

3734
{{#useBeanValidation}}
3835
import {{javaxPackage}}.validation.Valid
@@ -60,9 +57,7 @@ import kotlin.collections.Map
6057
@Api(value = "{{{baseName}}}", description = "The {{{baseName}}} API")
6158
{{/swagger1AnnotationLibrary}}
6259
{{#useRequestMappingOnController}}
63-
{{=<% %>=}}
64-
@RequestMapping("\${openapi.<%title%>.base-path:\${api.base-path:$BASE_PATH}}")
65-
<%={{ }}=%>
60+
@RequestMapping("\${api.base-path:{{contextPath}}}")
6661
{{/useRequestMappingOnController}}
6762
{{#operations}}
6863
class {{classname}}Controller({{#serviceInterface}}@Autowired(required = true) val service: {{classname}}Service{{/serviceInterface}}) {

modules/openapi-generator/src/main/resources/kotlin-spring/apiController.mustache

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,12 @@ package {{package}}
33
import org.springframework.stereotype.Controller
44
import org.springframework.web.bind.annotation.RequestMapping
55
import java.util.Optional
6-
{{#useRequestMappingOnController}}
7-
import {{#apiPackage}}{{.}}.{{/apiPackage}}{{classname}}Controller.Companion.BASE_PATH
8-
{{/useRequestMappingOnController}}
96

107
{{>generatedAnnotation}}
118

129
@Controller{{#beanQualifiers}}("{{package}}.{{classname}}Controller"){{/beanQualifiers}}
1310
{{#useRequestMappingOnController}}
14-
{{=<% %>=}}
15-
@RequestMapping("\${openapi.<%title%>.base-path:\${api.base-path:$BASE_PATH}}")
16-
<%={{ }}=%>
11+
@RequestMapping("\${api.base-path:{{contextPath}}}")
1712
{{/useRequestMappingOnController}}
1813
{{#operations}}
1914
class {{classname}}Controller(

modules/openapi-generator/src/main/resources/kotlin-spring/apiInterface.mustache

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ import org.springframework.validation.annotation.Validated
3535
{{/useBeanValidation}}
3636
import org.springframework.web.context.request.NativeWebRequest
3737
import org.springframework.beans.factory.annotation.Autowired
38-
{{#useRequestMappingOnInterface}}
39-
import {{#apiPackage}}{{.}}.{{/apiPackage}}{{classname}}.Companion.BASE_PATH
40-
{{/useRequestMappingOnInterface}}
4138

4239
{{#useBeanValidation}}
4340
import {{javaxPackage}}.validation.constraints.DecimalMax
@@ -67,9 +64,7 @@ import kotlin.collections.Map
6764
@Api(value = "{{{baseName}}}", description = "The {{{baseName}}} API")
6865
{{/swagger1AnnotationLibrary}}
6966
{{#useRequestMappingOnInterface}}
70-
{{=<% %>=}}
71-
@RequestMapping("\${openapi.<%title%>.base-path:\${api.base-path:$BASE_PATH}}")
72-
<%={{ }}=%>
67+
@RequestMapping("\${api.base-path:{{contextPath}}}")
7368
{{/useRequestMappingOnInterface}}
7469
{{#operations}}
7570
interface {{classname}} {

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-declarative-http-interface/apiInterface.mustache

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ package {{package}}
66

77
{{#imports}}import {{import}}
88
{{/imports}}
9-
{{#useRequestMappingOnInterface}}
10-
import {{#apiPackage}}{{.}}.{{/apiPackage}}{{classname}}.Companion.BASE_PATH
11-
{{/useRequestMappingOnInterface}}
129

1310
{{#swagger2AnnotationLibrary}}
1411
import io.swagger.v3.oas.annotations.*
@@ -51,9 +48,7 @@ import kotlin.collections.List
5148
import kotlin.collections.Map
5249

5350
{{#useRequestMappingOnInterface}}
54-
{{=<% %>=}}
55-
@HttpExchange("\${openapi.<%title%>.base-path:\${api.base-path:$BASE_PATH}}")
56-
<%={{ }}=%>
51+
@HttpExchange("\${api.base-path:{{contextPath}}}")
5752
{{/useRequestMappingOnInterface}}
5853
{{#useBeanValidation}}
5954
@Validated

modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/spring/KotlinSpringServerCodegenTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,11 @@ public void testNoRequestMappingAnnotationController() throws IOException {
141141
"@RequestMapping(\"\\${"
142142
);
143143
// Check that the @RequestMapping annotation is generated in the ApiController file
144+
// Note: We use simple ${api.base-path:<default>} syntax because Spring's @RequestMapping
145+
// doesn't properly resolve nested ${outer:${inner:default}} property placeholder syntax
144146
assertFileContains(
145147
Paths.get(output + "/src/main/kotlin/org/openapitools/api/PetApiController.kt"),
146-
"@RequestMapping(\"\\${openapi.openAPIPetstore.base-path:\\${api.base-path:$BASE_PATH}}\")",
148+
"@RequestMapping(\"\\${api.base-path:/v2}\")",
147149
" companion object {\n"
148150
+ " //for your own safety never directly reuse these path definitions in tests\n"
149151
+ " const val BASE_PATH: String = \"/v2\"\n"
@@ -156,9 +158,11 @@ public void testNoRequestMappingAnnotationApiInterface() throws IOException {
156158
File output = generatePetstoreWithRequestMappingMode(KotlinSpringServerCodegen.RequestMappingMode.api_interface);
157159

158160
// Check that the @RequestMapping annotation is generated in the Api file
161+
// Note: We use simple ${api.base-path:<default>} syntax because Spring's @RequestMapping
162+
// doesn't properly resolve nested ${outer:${inner:default}} property placeholder syntax
159163
assertFileContains(
160164
Paths.get(output + "/src/main/kotlin/org/openapitools/api/PetApi.kt"),
161-
"@RequestMapping(\"\\${openapi.openAPIPetstore.base-path:\\${api.base-path:$BASE_PATH}}\")",
165+
"@RequestMapping(\"\\${api.base-path:/v2}\")",
162166
" companion object {\n"
163167
+ " //for your own safety never directly reuse these path definitions in tests\n"
164168
+ " const val BASE_PATH: String = \"/v2\""
@@ -1310,11 +1314,11 @@ public void generateHttpInterface() throws Exception {
13101314
generator.opts(input).generate();
13111315

13121316
Path path = Paths.get(outputPath + "/src/main/kotlin/org/openapitools/api/StoreApiClient.kt");
1317+
// Note: We use simple ${api.base-path:<default>} syntax because Spring's @HttpExchange
1318+
// doesn't properly resolve nested ${outer:${inner:default}} property placeholder syntax
13131319
assertFileContains(
13141320
path,
1315-
"@HttpExchange(\n"
1316-
+ "\"\\${openapi.openAPIPetstore.base-path:\\${api.base-path:$BASE_PATH}}\"\n"
1317-
+ ")",
1321+
"@HttpExchange(\"\\${api.base-path:/v2}\")",
13181322
" fun getInventory(\n"
13191323
+ " ): Map<String, kotlin.Int>",
13201324
" fun deleteOrder(\n"

samples/server/petstore/kotlin-spring-default/src/main/kotlin/org/openapitools/api/FakeApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414
import org.springframework.validation.annotation.Validated
1515
import org.springframework.web.context.request.NativeWebRequest
1616
import org.springframework.beans.factory.annotation.Autowired
17-
import org.openapitools.api.FakeApiController.Companion.BASE_PATH
1817

1918
import javax.validation.Valid
2019
import javax.validation.constraints.DecimalMax
@@ -31,7 +30,7 @@ import kotlin.collections.Map
3130

3231
@RestController
3332
@Validated
34-
@RequestMapping("\${openapi.openAPIPetstore.base-path:\${api.base-path:$BASE_PATH}}")
33+
@RequestMapping("\${api.base-path:/v2}")
3534
class FakeApiController() {
3635

3736
@Operation(

samples/server/petstore/kotlin-spring-default/src/main/kotlin/org/openapitools/api/PetApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.*
1515
import org.springframework.validation.annotation.Validated
1616
import org.springframework.web.context.request.NativeWebRequest
1717
import org.springframework.beans.factory.annotation.Autowired
18-
import org.openapitools.api.PetApiController.Companion.BASE_PATH
1918

2019
import javax.validation.Valid
2120
import javax.validation.constraints.DecimalMax
@@ -32,7 +31,7 @@ import kotlin.collections.Map
3231

3332
@RestController
3433
@Validated
35-
@RequestMapping("\${openapi.openAPIPetstore.base-path:\${api.base-path:$BASE_PATH}}")
34+
@RequestMapping("\${api.base-path:/v2}")
3635
class PetApiController() {
3736

3837
@Operation(

samples/server/petstore/kotlin-spring-default/src/main/kotlin/org/openapitools/api/StoreApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414
import org.springframework.validation.annotation.Validated
1515
import org.springframework.web.context.request.NativeWebRequest
1616
import org.springframework.beans.factory.annotation.Autowired
17-
import org.openapitools.api.StoreApiController.Companion.BASE_PATH
1817

1918
import javax.validation.Valid
2019
import javax.validation.constraints.DecimalMax
@@ -31,7 +30,7 @@ import kotlin.collections.Map
3130

3231
@RestController
3332
@Validated
34-
@RequestMapping("\${openapi.openAPIPetstore.base-path:\${api.base-path:$BASE_PATH}}")
33+
@RequestMapping("\${api.base-path:/v2}")
3534
class StoreApiController() {
3635

3736
@Operation(

samples/server/petstore/kotlin-spring-default/src/main/kotlin/org/openapitools/api/UserApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414
import org.springframework.validation.annotation.Validated
1515
import org.springframework.web.context.request.NativeWebRequest
1616
import org.springframework.beans.factory.annotation.Autowired
17-
import org.openapitools.api.UserApiController.Companion.BASE_PATH
1817

1918
import javax.validation.Valid
2019
import javax.validation.constraints.DecimalMax
@@ -31,7 +30,7 @@ import kotlin.collections.Map
3130

3231
@RestController
3332
@Validated
34-
@RequestMapping("\${openapi.openAPIPetstore.base-path:\${api.base-path:$BASE_PATH}}")
33+
@RequestMapping("\${api.base-path:/v2}")
3534
class UserApiController() {
3635

3736
@Operation(

samples/server/petstore/kotlin-springboot-bigdecimal-default/src/main/kotlin/org/openapitools/api/TestApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414
import org.springframework.validation.annotation.Validated
1515
import org.springframework.web.context.request.NativeWebRequest
1616
import org.springframework.beans.factory.annotation.Autowired
17-
import org.openapitools.api.TestApiController.Companion.BASE_PATH
1817

1918
import javax.validation.Valid
2019
import javax.validation.constraints.DecimalMax
@@ -31,7 +30,7 @@ import kotlin.collections.Map
3130

3231
@RestController
3332
@Validated
34-
@RequestMapping("\${openapi.demo.base-path:\${api.base-path:$BASE_PATH}}")
33+
@RequestMapping("\${api.base-path:}")
3534
class TestApiController() {
3635

3736
@Operation(

0 commit comments

Comments
 (0)