Skip to content

Commit 8685cb9

Browse files
committed
fix CR suggestions
1 parent 02a530a commit 8685cb9

33 files changed

Lines changed: 310 additions & 120 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} {{>beanValidationBodyParams}}@Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}@RequestPart{{/isArray}}{{^isArray}}{{#reactive}}@RequestPart{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{{dataType}}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isByteArray}} /* base64 encoded binary */{{/isByteArray}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isFile}}{{/isFormParam}}
1+
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} {{>beanValidationBodyParams}}@Valid{{/useBeanValidation}} {{#isModel}}@RequestParam{{/isModel}}{{^isModel}}{{#isArray}}@RequestParam{{/isArray}}{{^isArray}}{{#reactive}}@RequestParam{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{{dataType}}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isByteArray}} /* base64 encoded binary */{{/isByteArray}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isFile}}{{/isFormParam}}

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@ public void shouldHandleFormatByteCorrectlyForAllApiParametersAndProperties() th
877877
.hasType("String"); // plain query param → always String
878878
JavaFileAssert.assertThat(files.get("QueryApi.java"))
879879
.assertMethod("queryParams")
880-
.assertParameter("_byte")
880+
.assertParameter("bytes")
881881
.hasType("String"); // Base64 query param → String (manual decoding needed)
882882

883883
// Path parameters: same behavior as query params
@@ -887,7 +887,7 @@ public void shouldHandleFormatByteCorrectlyForAllApiParametersAndProperties() th
887887
.hasType("String"); // path param → String
888888
JavaFileAssert.assertThat(files.get("PathApi.java"))
889889
.assertMethod("pathParams")
890-
.assertParameter("_byte")
890+
.assertParameter("bytes")
891891
.hasType("String"); // Base64 path param → String
892892

893893
// Header parameters: always String
@@ -907,7 +907,7 @@ public void shouldHandleFormatByteCorrectlyForAllApiParametersAndProperties() th
907907
.hasType("String"); // cookie → String
908908
JavaFileAssert.assertThat(files.get("CookieApi.java"))
909909
.assertMethod("cookieParams")
910-
.assertParameter("_byte")
910+
.assertParameter("bytes")
911911
.hasType("String"); // Base64 cookie → String
912912

913913
// Form fields: text fields → String
@@ -917,29 +917,40 @@ public void shouldHandleFormatByteCorrectlyForAllApiParametersAndProperties() th
917917
.hasType("String"); // form field → String
918918
JavaFileAssert.assertThat(files.get("FormApi.java"))
919919
.assertMethod("formParams")
920-
.assertParameter("_byte")
920+
.assertParameter("bytes")
921921
.hasType("String"); // Base64 form field → String
922922

923923
// Multipart fields: text fields → String, files → MultipartFile
924+
// Verifies that a simple multipart text field is generated as a String parameter
924925
JavaFileAssert.assertThat(files.get("MultipartApi.java"))
925926
.assertMethod("multipartParams")
926927
.assertParameter("plain")
927928
.hasType("String"); // multipart text field → String
929+
930+
// Verifies that a Base64-encoded multipart field is treated as text (String)
931+
// and is bound using @RequestParam rather than @RequestPart
928932
JavaFileAssert.assertThat(files.get("MultipartApi.java"))
929933
.assertMethod("multipartParams")
930-
.assertParameter("_byte")
931-
.hasType("String"); // Base64 multipart text → String
934+
.assertParameter("bytes")
935+
.hasType("String") // Base64 multipart text → String
936+
.assertParameterAnnotations()
937+
.containsWithName("RequestParam");
938+
939+
// Verifies that a binary file upload is exposed as MultipartFile
940+
// and correctly bound from a multipart section using @RequestPart
932941
JavaFileAssert.assertThat(files.get("MultipartApi.java"))
933942
.assertMethod("multipartParams")
934943
.assertParameter("file")
935-
.hasType("MultipartFile"); // binary file upload → MultipartFile
944+
.hasType("MultipartFile") // binary file upload → MultipartFile
945+
.assertParameterAnnotations()
946+
.containsWithName("RequestPart");
936947

937948
// Form request DTO: JSON or form object mapping
938949
JavaFileAssert.assertThat(files.get("FormParamsRequest.java"))
939950
.assertProperty("plain")
940951
.withType("String"); // text property → String
941952
JavaFileAssert.assertThat(files.get("FormParamsRequest.java"))
942-
.assertProperty("_byte")
953+
.assertProperty("bytes")
943954
.isArray()
944955
.withType("byte"); // Base64 property in DTO → auto-decoded to byte[]
945956

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,28 @@ public void skipDefaultInterface() throws Exception {
602602
);
603603
}
604604

605+
@Test(description = "test skip default interface")
606+
public void skipDefaultIgfdgdnterface() throws Exception {
607+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
608+
output.deleteOnExit();
609+
String outputPath = output.getAbsolutePath().replace('\\', '/');
610+
611+
KotlinSpringServerCodegen codegen = new KotlinSpringServerCodegen();
612+
codegen.setOutputDir(output.getAbsolutePath());
613+
codegen.additionalProperties().put(KotlinSpringServerCodegen.INTERFACE_ONLY, true);
614+
codegen.additionalProperties().put(KotlinSpringServerCodegen.SKIP_DEFAULT_INTERFACE, true);
615+
616+
new DefaultGenerator().opts(new ClientOptInput()
617+
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/kotlin/byte-format-edge-cases.yaml"))
618+
.config(codegen))
619+
.generate();
620+
621+
assertFileNotContains(
622+
Paths.get(outputPath + "/src/main/kotlin/org/openapitools/api/PingApi.kt"),
623+
"return "
624+
);
625+
}
626+
605627
@Test(description = "test cookie parameter generation on interface apis")
606628
public void cookieParameterGenerationApis() throws Exception {
607629
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
openapi: 3.0.3
2+
info:
3+
title: Byte Format Edge Cases
4+
version: 1.0.0
5+
6+
paths:
7+
/query:
8+
get:
9+
operationId: queryParams
10+
summary: Query parameters
11+
parameters:
12+
- name: plain
13+
in: query
14+
schema:
15+
type: string
16+
- name: byte
17+
in: query
18+
schema:
19+
type: string
20+
format: byte
21+
responses:
22+
'204':
23+
description: No content
24+
25+
/path/{plain}/{byte}:
26+
get:
27+
operationId: pathParams
28+
summary: Path parameters
29+
parameters:
30+
- name: plain
31+
in: path
32+
required: true
33+
schema:
34+
type: string
35+
- name: byte
36+
in: path
37+
required: true
38+
schema:
39+
type: string
40+
format: byte
41+
responses:
42+
'204':
43+
description: No content
44+
45+
/header:
46+
get:
47+
operationId: headerParams
48+
summary: Header parameters
49+
parameters:
50+
- name: X-Plain
51+
in: header
52+
schema:
53+
type: string
54+
- name: X-Byte
55+
in: header
56+
schema:
57+
type: string
58+
format: byte
59+
responses:
60+
'204':
61+
description: No content
62+
63+
/cookie:
64+
get:
65+
operationId: cookieParams
66+
summary: Cookie parameters
67+
parameters:
68+
- name: plain
69+
in: cookie
70+
schema:
71+
type: string
72+
- name: byte
73+
in: cookie
74+
schema:
75+
type: string
76+
format: byte
77+
responses:
78+
'204':
79+
description: No content
80+
81+
/form:
82+
post:
83+
operationId: formParams
84+
summary: application/x-www-form-urlencoded
85+
requestBody:
86+
required: true
87+
content:
88+
application/x-www-form-urlencoded:
89+
schema:
90+
type: object
91+
properties:
92+
plain:
93+
type: string
94+
byte:
95+
type: string
96+
format: byte
97+
responses:
98+
'204':
99+
description: No content
100+
101+
/multipart:
102+
post:
103+
operationId: multipartParams
104+
summary: multipart/form-data
105+
requestBody:
106+
required: true
107+
content:
108+
multipart/form-data:
109+
schema:
110+
type: object
111+
properties:
112+
plain:
113+
type: string
114+
byte:
115+
type: string
116+
format: byte
117+
file:
118+
type: string
119+
format: binary
120+
responses:
121+
'204':
122+
description: No content
123+
124+
/json-body:
125+
post:
126+
operationId: jsonBody
127+
summary: JSON request body
128+
requestBody:
129+
required: true
130+
content:
131+
application/json:
132+
schema:
133+
type: object
134+
properties:
135+
plain:
136+
type: string
137+
byte:
138+
type: string
139+
format: byte
140+
responses:
141+
'204':
142+
description: No content
143+
144+
/binary-body:
145+
post:
146+
operationId: binaryBody
147+
summary: Raw binary body
148+
requestBody:
149+
required: true
150+
content:
151+
application/octet-stream:
152+
schema:
153+
type: string
154+
format: binary
155+
responses:
156+
'204':
157+
description: No content

modules/openapi-generator/src/test/resources/3_0/spring/byte-format-edge-cases.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ paths:
1313
in: query
1414
schema:
1515
type: string
16-
- name: byte
16+
- name: bytes
1717
in: query
1818
schema:
1919
type: string
@@ -22,7 +22,7 @@ paths:
2222
'204':
2323
description: No content
2424

25-
/path/{plain}/{byte}:
25+
/path/{plain}/{bytes}:
2626
get:
2727
operationId: pathParams
2828
summary: Path parameters
@@ -32,7 +32,7 @@ paths:
3232
required: true
3333
schema:
3434
type: string
35-
- name: byte
35+
- name: bytes
3636
in: path
3737
required: true
3838
schema:
@@ -69,7 +69,7 @@ paths:
6969
in: cookie
7070
schema:
7171
type: string
72-
- name: byte
72+
- name: bytes
7373
in: cookie
7474
schema:
7575
type: string
@@ -91,7 +91,7 @@ paths:
9191
properties:
9292
plain:
9393
type: string
94-
byte:
94+
bytes:
9595
type: string
9696
format: byte
9797
responses:
@@ -111,7 +111,7 @@ paths:
111111
properties:
112112
plain:
113113
type: string
114-
byte:
114+
bytes:
115115
type: string
116116
format: byte
117117
file:
@@ -134,7 +134,7 @@ paths:
134134
properties:
135135
plain:
136136
type: string
137-
byte:
137+
bytes:
138138
type: string
139139
format: byte
140140
responses:

samples/client/petstore/spring-http-interface-noResponseEntity/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ void testEnumParameters(
259259
@RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
260260
@RequestParam(value = "enum_query_integer", required = false) @Nullable Integer enumQueryInteger,
261261
@RequestParam(value = "enum_query_double", required = false) @Nullable Double enumQueryDouble,
262-
@RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
262+
@RequestParam(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
263263
@RequestParam(value = "enum_form_string", required = false) String enumFormString
264264
);
265265

samples/client/petstore/spring-http-interface-reactive-noResponseEntity/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -217,20 +217,20 @@ Mono<Client> testClientModel(
217217
contentType = "application/x-www-form-urlencoded"
218218
)
219219
Mono<Void> testEndpointParameters(
220-
@RequestPart(value = "number", required = true) BigDecimal number,
221-
@RequestPart(value = "double", required = true) Double _double,
222-
@RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
223-
@RequestPart(value = "byte", required = true) String _byte /* base64 encoded binary */,
224-
@RequestPart(value = "integer", required = false) Integer integer,
225-
@RequestPart(value = "int32", required = false) Integer int32,
226-
@RequestPart(value = "int64", required = false) Long int64,
227-
@RequestPart(value = "float", required = false) Float _float,
228-
@RequestPart(value = "string", required = false) String string,
220+
@RequestParam(value = "number", required = true) BigDecimal number,
221+
@RequestParam(value = "double", required = true) Double _double,
222+
@RequestParam(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
223+
@RequestParam(value = "byte", required = true) String _byte /* base64 encoded binary */,
224+
@RequestParam(value = "integer", required = false) Integer integer,
225+
@RequestParam(value = "int32", required = false) Integer int32,
226+
@RequestParam(value = "int64", required = false) Long int64,
227+
@RequestParam(value = "float", required = false) Float _float,
228+
@RequestParam(value = "string", required = false) String string,
229229
@RequestPart(value = "binary", required = false) Part binary,
230-
@RequestPart(value = "date", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date,
231-
@RequestPart(value = "dateTime", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
232-
@RequestPart(value = "password", required = false) String password,
233-
@RequestPart(value = "callback", required = false) String paramCallback
230+
@RequestParam(value = "date", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date,
231+
@RequestParam(value = "dateTime", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
232+
@RequestParam(value = "password", required = false) String password,
233+
@RequestParam(value = "callback", required = false) String paramCallback
234234
);
235235

236236

@@ -263,8 +263,8 @@ Mono<Void> testEnumParameters(
263263
@RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
264264
@RequestParam(value = "enum_query_integer", required = false) @Nullable Integer enumQueryInteger,
265265
@RequestParam(value = "enum_query_double", required = false) @Nullable Double enumQueryDouble,
266-
@RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
267-
@RequestPart(value = "enum_form_string", required = false) String enumFormString
266+
@RequestParam(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
267+
@RequestParam(value = "enum_form_string", required = false) String enumFormString
268268
);
269269

270270

@@ -331,8 +331,8 @@ Mono<Void> testInlineAdditionalProperties(
331331
contentType = "application/x-www-form-urlencoded"
332332
)
333333
Mono<Void> testJsonFormData(
334-
@RequestPart(value = "param", required = true) String param,
335-
@RequestPart(value = "param2", required = true) String param2
334+
@RequestParam(value = "param", required = true) String param,
335+
@RequestParam(value = "param2", required = true) String param2
336336
);
337337

338338

0 commit comments

Comments
 (0)