Skip to content

Commit cca635e

Browse files
committed
fix: use arraySchema when deciding required of an array
1 parent 0b327a6 commit cca635e

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
743743
propSchemaOrArray == null ?
744744
null :
745745
propSchemaOrArray instanceof io.swagger.v3.oas.annotations.media.ArraySchema ?
746-
((io.swagger.v3.oas.annotations.media.ArraySchema) propSchemaOrArray).schema() :
746+
((io.swagger.v3.oas.annotations.media.ArraySchema) propSchemaOrArray).arraySchema() :
747747
(io.swagger.v3.oas.annotations.media.Schema) propSchemaOrArray;
748748

749749
io.swagger.v3.oas.annotations.media.Schema.AccessMode accessMode = resolveAccessMode(propDef, type, propResolvedSchemaAnnotation);

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import io.swagger.v3.jaxrs2.resources.Ticket3731BisResource;
8484
import io.swagger.v3.jaxrs2.resources.Ticket3731Resource;
8585
import io.swagger.v3.jaxrs2.resources.Ticket4065Resource;
86+
import io.swagger.v3.jaxrs2.resources.Ticket4341Resource;
8687
import io.swagger.v3.jaxrs2.resources.Ticket4412Resource;
8788
import io.swagger.v3.jaxrs2.resources.Ticket4446Resource;
8889
import io.swagger.v3.jaxrs2.resources.Ticket4483Resource;
@@ -795,6 +796,21 @@ public void test2497() {
795796
assertEquals(openAPI.getComponents().getSchemas().get("User").getRequired().get(0), "issue3438");
796797
}
797798

799+
@Test(description = "array required property resolved from ArraySchema.arraySchema.requiredMode")
800+
public void test4341() {
801+
Reader reader = new Reader(new OpenAPI());
802+
OpenAPI openAPI = reader.read(Ticket4341Resource.class);
803+
804+
Schema userSchema = openAPI.getComponents().getSchemas().get("User");
805+
List<String> required = userSchema.getRequired();
806+
assertTrue(required.contains("requiredArray"));
807+
assertFalse(required.contains("notRequiredArray"));
808+
assertFalse(required.contains("notRequiredArrayWithNotNull"));
809+
assertTrue(required.contains("autoRequiredWithNotNull"));
810+
assertFalse(required.contains("autoNotRequired"));
811+
}
812+
813+
798814
@Test(description = "test resource with subresources")
799815
public void testResourceWithSubresources() {
800816
Reader reader = new Reader(new OpenAPI());
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.swagger.v3.jaxrs2.resources;
2+
3+
import io.swagger.v3.oas.annotations.media.ArraySchema;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import javax.validation.constraints.NotNull;
6+
import javax.ws.rs.GET;
7+
import javax.ws.rs.Path;
8+
import java.util.List;
9+
10+
public class Ticket4341Resource {
11+
12+
@GET
13+
@Path("/user")
14+
public User getUsers() {
15+
return null;
16+
}
17+
18+
static class User {
19+
@ArraySchema(
20+
arraySchema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED),
21+
schema = @Schema(type = "string")
22+
)
23+
public List<String> requiredArray;
24+
25+
@ArraySchema(
26+
arraySchema = @Schema(requiredMode = Schema.RequiredMode.NOT_REQUIRED),
27+
schema = @Schema(type = "string")
28+
)
29+
public List<String> notRequiredArray;
30+
31+
@ArraySchema(
32+
arraySchema = @Schema(requiredMode = Schema.RequiredMode.NOT_REQUIRED),
33+
schema = @Schema(type = "string")
34+
)
35+
@NotNull
36+
public List<String> notRequiredArrayWithNotNull;
37+
38+
@ArraySchema(
39+
arraySchema = @Schema(requiredMode = Schema.RequiredMode.AUTO),
40+
schema = @Schema(type = "string")
41+
)
42+
@NotNull
43+
public List<String> autoRequiredWithNotNull;
44+
45+
@ArraySchema(
46+
arraySchema = @Schema(requiredMode = Schema.RequiredMode.AUTO),
47+
schema = @Schema(type = "string")
48+
)
49+
public List<String> autoNotRequired;
50+
}
51+
}

0 commit comments

Comments
 (0)