Skip to content

Commit 7aa8c86

Browse files
#4781 Jackson/@JsonUnwrapped - when innerModel.$ref not null - unwrapping does not happen
1 parent e8bb595 commit 7aa8c86

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public class ModelResolver extends AbstractModelConverter implements ModelConver
118118

119119
public static boolean composedModelPropertiesAsSibling = System.getProperty(SET_PROPERTY_OF_COMPOSED_MODEL_AS_SIBLING) != null;
120120

121+
private static final int SCHEMA_COMPONENT_PREFIX = "#/components/schemas/".length();
122+
121123
/**
122124
* Allows all enums to be resolved as a reference to a scheme added to the components section.
123125
*/
@@ -727,7 +729,11 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
727729
.ctxAnnotations(null)
728730
.jsonUnwrappedHandler(null)
729731
.resolveAsRef(false);
730-
handleUnwrapped(props, context.resolve(t), uw.prefix(), uw.suffix(), requiredProps);
732+
Schema innerModel = context.resolve(t);
733+
if (StringUtils.isNotBlank(innerModel.get$ref())) {
734+
innerModel = context.getDefinedModels().get(innerModel.get$ref().substring(SCHEMA_COMPONENT_PREFIX));
735+
}
736+
handleUnwrapped(props, innerModel, uw.prefix(), uw.suffix(), requiredProps);
731737
return null;
732738
} else {
733739
return new Schema();
@@ -2278,7 +2284,7 @@ protected void resolveDiscriminatorProperty(JavaType type, ModelConverterContext
22782284
if (StringUtils.isNotBlank(typeInfoProp)) {
22792285
Schema modelToUpdate = model;
22802286
if (StringUtils.isNotBlank(model.get$ref())) {
2281-
modelToUpdate = context.getDefinedModels().get(model.get$ref().substring(21));
2287+
modelToUpdate = context.getDefinedModels().get(model.get$ref().substring(SCHEMA_COMPONENT_PREFIX));
22822288
}
22832289
if (modelToUpdate.getProperties() == null || !modelToUpdate.getProperties().keySet().contains(typeInfoProp)) {
22842290
Schema discriminatorSchema = new StringSchema().name(typeInfoProp);

0 commit comments

Comments
 (0)