Skip to content

Commit 23f2725

Browse files
LucasKuhlemannLucas Kuhlemann
authored andcommitted
[kotlin] implement serializable data classes (#8317)
1 parent 640ef9d commit 23f2725

File tree

45 files changed

+254
-44
lines changed

Some content is hidden

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

45 files changed

+254
-44
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
{{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}},
1515
{{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>dataClassOptVar}}{{^-last}},
1616
{{/-last}}{{/optionalVars}}
17-
) {{/discriminator}}{{#parent}}: {{{.}}}{{/parent}}{
17+
) {{/discriminator}}{{#parent}}: {{{.}}}{{#serializableModel}}, Serializable{{/serializableModel}}{{/parent}}{{#serializableModel}}: Serializable{{/serializableModel}}{
1818
{{#discriminator}}
1919
{{#requiredVars}}
2020
{{>interfaceReqVar}}
@@ -33,4 +33,9 @@
3333
@JsonProperty({{{value}}}) {{{name}}}({{{value}}}){{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}}
3434
}
3535
{{/isEnum}}{{/vars}}{{/hasEnums}}
36+
{{#serializableModel}}
37+
companion object {
38+
private const val serialVersionUID: kotlin.Long = 1
39+
}
40+
{{/serializableModel}}
3641
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package {{package}}
33
import java.util.Objects
44
{{#imports}}import {{import}}
55
{{/imports}}
6+
{{#serializableModel}}
7+
import java.io.Serializable
8+
{{/serializableModel}}
69
{{#useBeanValidation}}
710
import {{javaxPackage}}.validation.constraints.DecimalMax
811
import {{javaxPackage}}.validation.constraints.DecimalMin

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

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ public void testSettersForConfigValues() throws Exception {
184184
codegen.setServiceImplementation(true);
185185
codegen.setUseBeanValidation(false);
186186
codegen.setReactive(false);
187+
codegen.setSerializableModel(true);
187188
codegen.processOpts();
188189

189190
Assert.assertEquals(codegen.modelPackage(), "xx.yyyyyyyy.model");
@@ -206,6 +207,8 @@ public void testSettersForConfigValues() throws Exception {
206207
Assert.assertEquals(codegen.additionalProperties().get(KotlinSpringServerCodegen.USE_BEANVALIDATION), false);
207208
Assert.assertFalse(codegen.isReactive());
208209
Assert.assertEquals(codegen.additionalProperties().get(KotlinSpringServerCodegen.REACTIVE), false);
210+
Assert.assertTrue(codegen.isSerializableModel());
211+
Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.SERIALIZABLE_MODEL), true);
209212
}
210213

211214
@Test
@@ -747,4 +750,35 @@ public void givenMultipartForm_whenGenerateReactiveServer_thenParameterAreCreate
747750
"@Parameter(description = \"image to upload\") @Valid @RequestPart(\"image\", required = false) image: org.springframework.core.io.Resource?");
748751

749752
}
750-
}
753+
754+
@Test
755+
public void generateSerializableModel() throws Exception {
756+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
757+
output.deleteOnExit();
758+
String outputPath = output.getAbsolutePath().replace('\\', '/');
759+
760+
KotlinSpringServerCodegen codegen = new KotlinSpringServerCodegen();
761+
codegen.setOutputDir(output.getAbsolutePath());
762+
codegen.additionalProperties().put(CodegenConstants.SERIALIZABLE_MODEL, true);
763+
764+
ClientOptInput input = new ClientOptInput()
765+
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/kotlin/petstore.yaml"))
766+
.config(codegen);
767+
DefaultGenerator generator = new DefaultGenerator();
768+
769+
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
770+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
771+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
772+
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false");
773+
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
774+
775+
generator.opts(input).generate();
776+
777+
assertFileContains(
778+
Paths.get(outputPath + "/src/main/kotlin/org/openapitools/model/Pet.kt"),
779+
"import java.io.Serializable",
780+
") : Serializable{",
781+
"private const val serialVersionUID: kotlin.Long = 1"
782+
);
783+
}
784+
}

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/model/Category.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.openapitools.model
22

33
import java.util.Objects
44
import com.fasterxml.jackson.annotation.JsonProperty
5+
import java.io.Serializable
56
import javax.validation.constraints.DecimalMax
67
import javax.validation.constraints.DecimalMin
78
import javax.validation.constraints.Email
@@ -23,7 +24,10 @@ data class Category(
2324

2425
@get:Pattern(regexp="^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$")
2526
@get:JsonProperty("name") val name: kotlin.String? = null
26-
) {
27+
) : Serializable{
2728

29+
companion object {
30+
private const val serialVersionUID: kotlin.Long = 1
31+
}
2832
}
2933

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/model/ModelApiResponse.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.openapitools.model
22

33
import java.util.Objects
44
import com.fasterxml.jackson.annotation.JsonProperty
5+
import java.io.Serializable
56
import javax.validation.constraints.DecimalMax
67
import javax.validation.constraints.DecimalMin
78
import javax.validation.constraints.Email
@@ -25,7 +26,10 @@ data class ModelApiResponse(
2526
@get:JsonProperty("type") val type: kotlin.String? = null,
2627

2728
@get:JsonProperty("message") val message: kotlin.String? = null
28-
) {
29+
) : Serializable{
2930

31+
companion object {
32+
private const val serialVersionUID: kotlin.Long = 1
33+
}
3034
}
3135

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/model/Order.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.openapitools.model
33
import java.util.Objects
44
import com.fasterxml.jackson.annotation.JsonProperty
55
import com.fasterxml.jackson.annotation.JsonValue
6+
import java.io.Serializable
67
import javax.validation.constraints.DecimalMax
78
import javax.validation.constraints.DecimalMin
89
import javax.validation.constraints.Email
@@ -35,7 +36,7 @@ data class Order(
3536
@get:JsonProperty("status") val status: Order.Status? = null,
3637

3738
@get:JsonProperty("complete") val complete: kotlin.Boolean? = false
38-
) {
39+
) : Serializable{
3940

4041
/**
4142
* Order Status
@@ -48,5 +49,8 @@ data class Order(
4849
@JsonProperty("delivered") delivered("delivered")
4950
}
5051

52+
companion object {
53+
private const val serialVersionUID: kotlin.Long = 1
54+
}
5155
}
5256

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/model/Pet.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
55
import com.fasterxml.jackson.annotation.JsonValue
66
import org.openapitools.model.Category
77
import org.openapitools.model.Tag
8+
import java.io.Serializable
89
import javax.validation.constraints.DecimalMax
910
import javax.validation.constraints.DecimalMin
1011
import javax.validation.constraints.Email
@@ -40,7 +41,7 @@ data class Pet(
4041

4142
@Deprecated(message = "")
4243
@get:JsonProperty("status") val status: Pet.Status? = null
43-
) {
44+
) : Serializable{
4445

4546
/**
4647
* pet status in the store
@@ -53,5 +54,8 @@ data class Pet(
5354
@JsonProperty("sold") sold("sold")
5455
}
5556

57+
companion object {
58+
private const val serialVersionUID: kotlin.Long = 1
59+
}
5660
}
5761

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/model/Tag.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.openapitools.model
22

33
import java.util.Objects
44
import com.fasterxml.jackson.annotation.JsonProperty
5+
import java.io.Serializable
56
import javax.validation.constraints.DecimalMax
67
import javax.validation.constraints.DecimalMin
78
import javax.validation.constraints.Email
@@ -22,7 +23,10 @@ data class Tag(
2223
@get:JsonProperty("id") val id: kotlin.Long? = null,
2324

2425
@get:JsonProperty("name") val name: kotlin.String? = null
25-
) {
26+
) : Serializable{
2627

28+
companion object {
29+
private const val serialVersionUID: kotlin.Long = 1
30+
}
2731
}
2832

samples/server/petstore/kotlin-spring-cloud/src/main/kotlin/org/openapitools/model/User.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.openapitools.model
22

33
import java.util.Objects
44
import com.fasterxml.jackson.annotation.JsonProperty
5+
import java.io.Serializable
56
import javax.validation.constraints.DecimalMax
67
import javax.validation.constraints.DecimalMin
78
import javax.validation.constraints.Email
@@ -40,7 +41,10 @@ data class User(
4041
@get:JsonProperty("phone") val phone: kotlin.String? = null,
4142

4243
@get:JsonProperty("userStatus") val userStatus: kotlin.Int? = null
43-
) {
44+
) : Serializable{
4445

46+
companion object {
47+
private const val serialVersionUID: kotlin.Long = 1
48+
}
4549
}
4650

samples/server/petstore/kotlin-springboot-3/src/main/kotlin/org/openapitools/model/Category.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.openapitools.model
22

33
import java.util.Objects
44
import com.fasterxml.jackson.annotation.JsonProperty
5+
import java.io.Serializable
56
import jakarta.validation.constraints.DecimalMax
67
import jakarta.validation.constraints.DecimalMin
78
import jakarta.validation.constraints.Email
@@ -23,7 +24,10 @@ data class Category(
2324

2425
@get:Pattern(regexp="^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$")
2526
@get:JsonProperty("name") val name: kotlin.String? = null
26-
) {
27+
) : Serializable{
2728

29+
companion object {
30+
private const val serialVersionUID: kotlin.Long = 1
31+
}
2832
}
2933

0 commit comments

Comments
 (0)