Skip to content

Commit 17673cd

Browse files
authored
Merge pull request #3482 from swagger-api/issue-3259
refs #3259 - fix required annotation processing for reference properties
2 parents edde45b + 5367b1a commit 17673cd

File tree

4 files changed

+48
-8
lines changed

4 files changed

+48
-8
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -654,15 +654,15 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
654654
property = clone(context.resolve(aType));
655655

656656
if (property != null) {
657-
if (property.get$ref() == null) {
658-
Boolean required = md.getRequired();
659-
if (required != null && !Boolean.FALSE.equals(required)) {
657+
Boolean required = md.getRequired();
658+
if (required != null && !Boolean.FALSE.equals(required)) {
659+
addRequiredItem(model, propName);
660+
} else {
661+
if (propDef.isRequired()) {
660662
addRequiredItem(model, propName);
661-
} else {
662-
if (propDef.isRequired()) {
663-
addRequiredItem(model, propName);
664-
}
665663
}
664+
}
665+
if (property.get$ref() == null) {
666666
if (accessMode != null) {
667667
switch (accessMode) {
668668
case AUTO:
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.swagger.v3.core.oas.models;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
5+
import javax.xml.bind.annotation.XmlElement;
6+
import javax.xml.bind.annotation.XmlRootElement;
7+
8+
@XmlRootElement
9+
public class RequiredRefFieldModel {
10+
11+
@XmlElement(name = "a")
12+
@Schema(required = true)
13+
public String getA() {
14+
return "aaa";
15+
}
16+
17+
@XmlElement(name = "b")
18+
@Schema(required = true)
19+
public B getB() {
20+
return null;
21+
}
22+
23+
static class B {
24+
public String foo;
25+
}
26+
}

modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/RequiredFieldModelTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.swagger.v3.core.converter.ModelConverters;
44
import io.swagger.v3.core.oas.models.ApiFirstRequiredFieldModel;
5+
import io.swagger.v3.core.oas.models.RequiredRefFieldModel;
56
import io.swagger.v3.core.oas.models.XmlFirstRequiredFieldModel;
67
import io.swagger.v3.oas.models.media.Schema;
78
import org.testng.annotations.Test;
@@ -29,4 +30,17 @@ public void testApiModelPropertySecondPosition() {
2930
assertNotNull(prop);
3031
assertTrue(model.getRequired().contains("a"));
3132
}
33+
34+
35+
@Test(description = "it should apply required flag also to ref fields")
36+
public void testApiModelRefProperty() {
37+
final Map<String, Schema> models = ModelConverters.getInstance().readAll(RequiredRefFieldModel.class);
38+
final Schema model = models.get("RequiredRefFieldModel");
39+
final Schema prop = (Schema) model.getProperties().get("a");
40+
assertNotNull(prop);
41+
final Schema prop2 = (Schema) model.getProperties().get("b");
42+
assertNotNull(prop2);
43+
assertTrue(model.getRequired().contains("a"));
44+
assertTrue(model.getRequired().contains("b"));
45+
}
3246
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@
505505
<joda-time-version>2.9.9</joda-time-version>
506506
<snakeyaml-version>1.24</snakeyaml-version>
507507
<jakarta.ws-version>2.1.6</jakarta.ws-version>
508-
<felix-version>3.5.0</felix-version>
508+
<felix-version>4.2.1</felix-version>
509509
<servlet-api-version>4.0.3</servlet-api-version>
510510
<jersey2-version>2.26</jersey2-version>
511511
<jackson-version>2.10.1</jackson-version>

0 commit comments

Comments
 (0)