Skip to content

Commit fb1c948

Browse files
committed
improve urlencoded body handling (#412)
1 parent cf1ef9f commit fb1c948

File tree

4 files changed

+47
-3
lines changed

4 files changed

+47
-3
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright 2026 https://github.com/openapi-processor/openapi-processor-spring
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.spring.model
7+
8+
import io.openapiprocessor.core.model.APPLICATION_FORM_URLENCODED
9+
import io.openapiprocessor.core.model.datatypes.DataType
10+
import io.openapiprocessor.core.model.RequestBody as RequestBodyCore
11+
12+
class RequestBody(
13+
name: String,
14+
contentType: String,
15+
dataType: DataType,
16+
required: Boolean = false,
17+
deprecated: Boolean = false,
18+
description: String? = null
19+
) : RequestBodyCore(name, contentType, dataType, required, deprecated, description) {
20+
21+
/**
22+
* controls if a _request body_ parameter should have a {@code @RequestBody} annotation.
23+
*/
24+
override val withAnnotation: Boolean
25+
get() {
26+
return contentType != APPLICATION_FORM_URLENCODED
27+
}
28+
}

src/main/kotlin/io/openapiprocessor/spring/processor/SpringFramework.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ package io.openapiprocessor.spring.processor
88
import io.openapiprocessor.core.framework.FrameworkBase
99
import io.openapiprocessor.core.model.datatypes.DataType
1010
import io.openapiprocessor.core.model.parameters.Parameter
11-
import io.openapiprocessor.core.parser.MultipartParameter as MultipartParserParameter
12-
import io.openapiprocessor.core.parser.Parameter as ParserParameter
11+
import io.openapiprocessor.spring.model.RequestBody
1312
import io.openapiprocessor.spring.model.parameters.MultipartParameter
1413
import io.openapiprocessor.spring.model.parameters.QueryParameter
14+
import io.openapiprocessor.core.parser.MultipartParameter as MultipartParserParameter
15+
import io.openapiprocessor.core.parser.Parameter as ParserParameter
16+
import io.openapiprocessor.core.parser.RequestBody as ParserRequestBody
1517

1618
/**
1719
* Spring model factory.
@@ -41,4 +43,14 @@ class SpringFramework: FrameworkBase() {
4143
mpp.contentType
4244
)
4345
}
46+
47+
override fun createRequestBody(contentType: String, requestBody: ParserRequestBody, dataType: DataType): RequestBody {
48+
return RequestBody(
49+
"body",
50+
contentType,
51+
dataType,
52+
requestBody.getRequired(),
53+
false,
54+
requestBody.description)
55+
}
4456
}

src/main/kotlin/io/openapiprocessor/spring/writer/java/ParameterAnnotationWriter.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ class ParameterAnnotationWriter(private val annotations: FrameworkAnnotations)
2626
}
2727

2828
private fun createRequestBodyAnnotation(requestBody: RequestBody): String {
29+
if (! requestBody.withAnnotation) {
30+
return ""
31+
}
32+
2933
var annotation = getAnnotationName(requestBody)
3034

3135
// required is default, so add required only if the parameter is not required

src/testInt/resources/tests/params-request-body-form-urlencoded/outputs/api/Api.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void postFooParams(
1717
@RequestParam(name = "bar") String bar);
1818

1919
@ResponseStatus(HttpStatus.NO_CONTENT)
20-
@PostMapping(path = "/foo/object")
20+
@PostMapping(path = "/foo/object", consumes = {"application/x-www-form-urlencoded"})
2121
void postFooObject(Foo body);
2222

2323
}

0 commit comments

Comments
 (0)