44import io .swagger .v3 .core .jackson .ModelResolver ;
55import io .swagger .v3 .oas .models .Components ;
66import io .swagger .v3 .oas .models .OpenAPI ;
7+ import io .swagger .v3 .oas .models .media .Schema ;
78import it .aboutbits .springboot .toolbox .reflection .util .ClassScannerUtil ;
89import it .aboutbits .springboot .toolbox .swagger .annotation .ForceSwaggerSchema ;
910import lombok .RequiredArgsConstructor ;
11+ import lombok .extern .slf4j .Slf4j ;
1012import org .springdoc .core .customizers .OpenApiCustomizer ;
1113
14+ import java .util .Arrays ;
1215import java .util .LinkedHashMap ;
1316
1417@ RequiredArgsConstructor
18+ @ Slf4j
1519public class ForceSchemaCustomizer implements OpenApiCustomizer {
1620 private final ModelResolver modelResolver ;
1721 private final ClassScannerUtil .ClassScanner classScanner ;
@@ -37,6 +41,26 @@ private void addAnnotatedSchemas(OpenAPI openAPI) {
3741 var annotatedClasses = classScanner .getClassesAnnotatedWith (ForceSwaggerSchema .class );
3842
3943 for (var clazz : annotatedClasses ) {
44+ log .info ("Forcing schema for class: {}" , clazz .getName ());
45+
46+ if (clazz .isEnum ()) {
47+ var fqn = clazz .getName ();
48+ if (!openAPI .getComponents ().getSchemas ().containsKey (fqn )) {
49+ var schema = new Schema <String >();
50+ schema .name (fqn );
51+ schema .setEnum (
52+ Arrays .stream (clazz .getEnumConstants ())
53+ .map (Object ::toString )
54+ .toList ()
55+ );
56+ schema .setType ("string" );
57+ schema .addType ("string" );
58+
59+ openAPI .getComponents ().getSchemas ().put (fqn , schema );
60+ }
61+ continue ;
62+ }
63+
4064 var schemas = customModelConverters .read (clazz );
4165 // Only add if not already present (to avoid overriding naturally discovered schemas)
4266 schemas .forEach ((key , schema ) -> {
@@ -45,6 +69,11 @@ private void addAnnotatedSchemas(OpenAPI openAPI) {
4569 }
4670 });
4771 }
72+
73+ if (annotatedClasses .isEmpty ()) {
74+ log .info ("No classes with @ForceSwaggerSchema annotation found!" );
75+ log .debug ("Scanned packages: {}" , String .join (", " , classScanner .getScannedPackages ()));
76+ }
4877 }
4978}
5079
0 commit comments