From e89a83bf7e2334c17b0d03f2e65a2eda32c528f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=8A=B9=ED=98=84?= Date: Thu, 25 Apr 2024 23:07:09 +0900 Subject: [PATCH] refs #4662 - If a property has no annotation, but only a getter, it should be read-only. --- .../v3/core/jackson/ModelResolver.java | 3 +++ .../io/swagger/v3/core/oas/models/Cap.java | 8 ++++++++ .../serialization/ModelSerializerTest.java | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/Cap.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java index 73437bb660..b27aba1851 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java @@ -1975,6 +1975,9 @@ protected io.swagger.v3.oas.annotations.media.Schema.AccessMode resolveAccessMod if (!hasGetter && !hasField && (hasConstructorParameter || hasSetter)) { return io.swagger.v3.oas.annotations.media.Schema.AccessMode.WRITE_ONLY; } + if (hasGetter && !hasField && !hasConstructorParameter && !hasSetter) { + return io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY; + } return null; } else { switch (access) { diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/Cap.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/Cap.java new file mode 100644 index 0000000000..e91d049dc7 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/Cap.java @@ -0,0 +1,8 @@ +package io.swagger.v3.core.oas.models; + +public class Cap { + + public String getBrand() { + return "no brand"; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/ModelSerializerTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/ModelSerializerTest.java index b13386269c..29b72a1996 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/ModelSerializerTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/ModelSerializerTest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.matchers.SerializationMatchers; +import io.swagger.v3.core.oas.models.Cap; import io.swagger.v3.core.oas.models.Car; import io.swagger.v3.core.oas.models.Manufacturers; import io.swagger.v3.core.oas.models.ReadOnlyModel; @@ -150,6 +151,24 @@ public void makeFieldReadOnly() throws IOException { SerializationMatchers.assertEqualsToJson(schemas, json); } + @Test(description = "it should make a field readOnly, if there only getter") + public void makeGetterReadOnly() throws IOException { + final Map schemas = ModelConverters.getInstance().read(Cap.class); + final String json = + "{\n" + + " \"Cap\":{\n" + + " \"type\":\"object\",\n" + + " \"properties\":{\n" + + " \"brand\":{\n" + + " \"type\":\"string\",\n" + + " \"readOnly\":true\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + SerializationMatchers.assertEqualsToJson(schemas, json); + } + @Test(description = "it should serialize a model with a Set") public void serializeModelWithSet() throws IOException { final Map schemas = ModelConverters.getInstance().read(Manufacturers.class);