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 c66e53c4c6..842916cbf8 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 @@ -118,6 +118,8 @@ public class ModelResolver extends AbstractModelConverter implements ModelConver public static boolean composedModelPropertiesAsSibling = System.getProperty(SET_PROPERTY_OF_COMPOSED_MODEL_AS_SIBLING) != null; + private static final int SCHEMA_COMPONENT_PREFIX = "#/components/schemas/".length(); + /** * Allows all enums to be resolved as a reference to a scheme added to the components section. */ @@ -736,7 +738,11 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .ctxAnnotations(null) .jsonUnwrappedHandler(null) .resolveAsRef(false); - handleUnwrapped(props, context.resolve(t), uw.prefix(), uw.suffix(), requiredProps); + Schema innerModel = context.resolve(t); + if (StringUtils.isNotBlank(innerModel.get$ref())) { + innerModel = context.getDefinedModels().get(innerModel.get$ref().substring(SCHEMA_COMPONENT_PREFIX)); + } + handleUnwrapped(props, innerModel, uw.prefix(), uw.suffix(), requiredProps); return null; } else { return new Schema(); @@ -2291,7 +2297,7 @@ protected void resolveDiscriminatorProperty(JavaType type, ModelConverterContext if (StringUtils.isNotBlank(typeInfoProp)) { Schema modelToUpdate = model; if (StringUtils.isNotBlank(model.get$ref())) { - modelToUpdate = context.getDefinedModels().get(model.get$ref().substring(21)); + modelToUpdate = context.getDefinedModels().get(model.get$ref().substring(SCHEMA_COMPONENT_PREFIX)); } if (modelToUpdate.getProperties() == null || !modelToUpdate.getProperties().keySet().contains(typeInfoProp)) { Schema discriminatorSchema = new StringSchema().name(typeInfoProp);