Browse Source

fixed addDefaultSchemas() to not drop unresolved refs.

pull/15516/head
dashevchenko 5 months ago
parent
commit
6647bb4bfe
  1. 28
      application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java

28
application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java

@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.v3.core.converter.AnnotatedType; import io.swagger.v3.core.converter.AnnotatedType;
import io.swagger.v3.core.converter.ModelConverter; import io.swagger.v3.core.converter.ModelConverter;
import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converter.ModelConverters;
import io.swagger.v3.core.converter.ResolvedSchema;
import io.swagger.v3.core.jackson.ModelResolver; import io.swagger.v3.core.jackson.ModelResolver;
import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json;
import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.Components;
@ -373,13 +374,26 @@ public class SwaggerConfiguration {
._enum(Arrays.stream(ThingsboardErrorCode.values()) ._enum(Arrays.stream(ThingsboardErrorCode.values())
.map(ThingsboardErrorCode::getErrorCode) .map(ThingsboardErrorCode::getErrorCode)
.collect(Collectors.toList())); .collect(Collectors.toList()));
openAPI.getComponents() Components components = openAPI.getComponents();
.addSchemas("LoginRequest", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(LoginRequest.class)).schema) registerSchema(components, "LoginRequest", LoginRequest.class);
.addSchemas("LoginResponse", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(LoginResponse.class)).schema) registerSchema(components, "LoginResponse", LoginResponse.class);
.addSchemas("ThingsboardErrorResponse", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(ThingsboardErrorResponse.class)).schema) registerSchema(components, "ThingsboardErrorResponse", ThingsboardErrorResponse.class);
.addSchemas("ThingsboardCredentialsExpiredResponse", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(ThingsboardCredentialsExpiredResponse.class)).schema) registerSchema(components, "ThingsboardCredentialsExpiredResponse", ThingsboardCredentialsExpiredResponse.class);
.addSchemas("ThingsboardErrorCode", errorCodeSchema) components.addSchemas("ThingsboardErrorCode", errorCodeSchema);
.addSchemas("AiChatModelConfig", ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(AiChatModelConfig.class)).schema); registerSchema(components, "AiChatModelConfig", AiChatModelConfig.class);
}
private static void registerSchema(Components components, String name, Class<?> cls) {
ResolvedSchema resolved = ModelConverters.getInstance()
.readAllAsResolvedSchema(new AnnotatedType().type(cls));
components.addSchemas(name, resolved.schema);
if (resolved.referencedSchemas != null) {
resolved.referencedSchemas.forEach((refName, refSchema) -> {
if (components.getSchemas() == null || !components.getSchemas().containsKey(refName)) {
components.addSchemas(refName, refSchema);
}
});
}
} }
private OperationCustomizer operationCustomizer() { private OperationCustomizer operationCustomizer() {

Loading…
Cancel
Save