11package io .swagger .v3 .core .converter ;
22
3- import com .fasterxml .jackson .databind .type .TypeFactory ;
3+ import tools .jackson .databind .ObjectMapper ;
4+ import tools .jackson .databind .cfg .MapperBuilder ;
5+ import tools .jackson .databind .json .JsonMapper ;
6+ import tools .jackson .databind .type .TypeFactory ;
47import io .swagger .v3 .core .jackson .ModelResolver ;
58import io .swagger .v3 .core .util .Configuration ;
69import io .swagger .v3 .core .util .Json ;
2023import java .util .ServiceLoader ;
2124import java .util .Set ;
2225import java .util .concurrent .CopyOnWriteArrayList ;
26+ import java .util .function .Consumer ;
2327
2428public class ModelConverters {
2529 private static ModelConverters SINGLETON = null ;
@@ -30,8 +34,7 @@ public class ModelConverters {
3034 private final Set <String > skippedClasses = new HashSet <>();
3135
3236 public ModelConverters () {
33- converters = new CopyOnWriteArrayList <>();
34- converters .add (new ModelResolver (Json .mapper ()));
37+ this (false );
3538 }
3639
3740 public ModelConverters (boolean openapi31 ) {
@@ -52,6 +55,15 @@ public ModelConverters(boolean openapi31, Schema.SchemaResolution schemaResoluti
5255 }
5356 }
5457
58+ public ModelConverters (boolean openapi31 , Consumer <MapperBuilder <? extends ObjectMapper , ? extends MapperBuilder <?, ?>>> mapperBuilderCustomizer ) {
59+ converters = new CopyOnWriteArrayList <>();
60+ if (openapi31 ) {
61+ converters .add (new ModelResolver (Json31 .mapper (mapperBuilderCustomizer )).openapi31 (true ));
62+ } else {
63+ converters .add (new ModelResolver (Json .mapper (mapperBuilderCustomizer )));
64+ }
65+ }
66+
5567 public ModelConverters (Configuration configuration ) {
5668 converters = new CopyOnWriteArrayList <>();
5769 boolean openapi31 =configuration != null && configuration .isOpenAPI31 () != null && configuration .isOpenAPI31 ();
@@ -67,20 +79,32 @@ public Set<String> getSkippedPackages() {
6779 }
6880
6981 public static ModelConverters getInstance (boolean openapi31 ) {
82+ return getInstance (openapi31 , mapperBuilder -> {});
83+ }
84+
85+ public static ModelConverters getInstance (boolean openapi31 , Consumer <MapperBuilder <? extends ObjectMapper , ? extends MapperBuilder <?, ?>>> mapperBuilderCustomizer ) {
7086 if (openapi31 ) {
7187 if (SINGLETON31 == null ) {
72- SINGLETON31 = new ModelConverters (openapi31 );
88+ SINGLETON31 = new ModelConverters (openapi31 , mapperBuilderCustomizer );
7389 init (SINGLETON31 );
7490 }
7591 return SINGLETON31 ;
7692 }
7793 if (SINGLETON == null ) {
78- SINGLETON = new ModelConverters (openapi31 );
94+ SINGLETON = new ModelConverters (openapi31 , mapperBuilderCustomizer );
7995 init (SINGLETON );
8096 }
8197 return SINGLETON ;
8298 }
8399
100+ public static ModelConverters getInstance () {
101+ return getInstance (false );
102+ }
103+
104+ public static ModelConverters getInstance (Consumer <MapperBuilder <? extends ObjectMapper , ? extends MapperBuilder <?, ?>>> mapperBuilderCustomizer ) {
105+ return getInstance (false , mapperBuilderCustomizer );
106+ }
107+
84108 public static void reset () {
85109 synchronized (ModelConverters .class ) {
86110 SINGLETON = null ;
@@ -145,10 +169,6 @@ private static void init(ModelConverters converter) {
145169 }
146170
147171 }
148- public static ModelConverters getInstance () {
149- return getInstance (false );
150- }
151-
152172
153173 public void addConverter (ModelConverter converter ) {
154174 converters .add (0 , converter );
@@ -233,7 +253,7 @@ public boolean isRegisteredAsSkippedClass(String className) {
233253 }
234254
235255 private boolean shouldProcess (Type type ) {
236- final Class <?> cls = TypeFactory .defaultInstance ().constructType (type ).getRawClass ();
256+ final Class <?> cls = TypeFactory .createDefaultInstance ().constructType (type ).getRawClass ();
237257 if (cls .isPrimitive ()) {
238258 return false ;
239259 }
0 commit comments