|
40 | 40 | import io.swagger.v3.oas.models.Operation; |
41 | 41 | import io.swagger.v3.oas.models.PathItem; |
42 | 42 | import io.swagger.v3.oas.models.Paths; |
| 43 | +import io.swagger.v3.oas.models.SpecVersion; |
43 | 44 | import io.swagger.v3.oas.models.callbacks.Callback; |
44 | 45 | import io.swagger.v3.oas.models.examples.Example; |
45 | 46 | import io.swagger.v3.oas.models.headers.Header; |
|
74 | 75 | public class ObjectMapperFactory { |
75 | 76 |
|
76 | 77 | public static ObjectMapper createJson(JsonFactory jsonFactory) { |
77 | | - return create(jsonFactory, false); |
| 78 | + return create(jsonFactory, SpecVersion.V30); |
78 | 79 | } |
79 | 80 |
|
80 | 81 | public static ObjectMapper createJson() { |
81 | | - return create(null, false); |
| 82 | + return create(null, SpecVersion.V30); |
82 | 83 | } |
83 | 84 |
|
84 | 85 | public static ObjectMapper createYaml(YAMLFactory yamlFactory) { |
85 | | - return create(yamlFactory, false); |
| 86 | + return create(yamlFactory, SpecVersion.V30); |
86 | 87 | } |
87 | 88 |
|
88 | 89 | public static ObjectMapper createYaml() { |
89 | | - return createYaml(false); |
| 90 | + return createYaml(SpecVersion.V30); |
90 | 91 | } |
91 | 92 |
|
| 93 | + /** |
| 94 | + * @deprecated Use {@link #createYaml(SpecVersion)} instead |
| 95 | + */ |
| 96 | + @Deprecated |
92 | 97 | public static ObjectMapper createYaml(boolean openapi31) { |
| 98 | + return createYaml(openapi31 ? SpecVersion.V31 : SpecVersion.V30); |
| 99 | + } |
| 100 | + |
| 101 | + public static ObjectMapper createYaml(SpecVersion specVersion) { |
93 | 102 | YAMLFactory factory = new YAMLFactory(); |
94 | 103 | factory.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER); |
95 | 104 | factory.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES); |
96 | 105 | factory.enable(YAMLGenerator.Feature.SPLIT_LINES); |
97 | 106 | factory.enable(YAMLGenerator.Feature.ALWAYS_QUOTE_NUMBERS_AS_STRINGS); |
98 | 107 |
|
99 | | - return create(factory, openapi31); |
| 108 | + return create(factory, specVersion); |
100 | 109 | } |
101 | 110 |
|
102 | 111 | public static ObjectMapper createJson31(JsonFactory jsonFactory) { |
103 | | - return create(jsonFactory, true); |
| 112 | + return create(jsonFactory, SpecVersion.V31); |
104 | 113 | } |
105 | 114 |
|
106 | 115 | public static ObjectMapper createJson31() { |
107 | | - return create(null, true); |
| 116 | + return create(null, SpecVersion.V31); |
108 | 117 | } |
109 | 118 |
|
110 | 119 | public static ObjectMapper createYaml31(YAMLFactory yamlFactory) { |
111 | | - return create(yamlFactory, true); |
| 120 | + return create(yamlFactory, SpecVersion.V31); |
112 | 121 | } |
113 | 122 |
|
114 | 123 | public static ObjectMapper createYaml31() { |
115 | | - return createYaml(true); |
| 124 | + return createYaml(SpecVersion.V31); |
116 | 125 | } |
117 | 126 |
|
| 127 | + /** |
| 128 | + * @deprecated Use {@link #create(JsonFactory, SpecVersion)} instead |
| 129 | + */ |
| 130 | + @Deprecated |
118 | 131 | public static ObjectMapper create(JsonFactory jsonFactory, boolean openapi31) { |
| 132 | + return create(jsonFactory, openapi31 ? SpecVersion.V31 : SpecVersion.V30); |
| 133 | + } |
| 134 | + |
| 135 | + public static ObjectMapper create(JsonFactory jsonFactory, SpecVersion specVersion) { |
119 | 136 | ObjectMapper mapper = jsonFactory == null ? new ObjectMapper() : new ObjectMapper(jsonFactory); |
120 | 137 |
|
121 | | - if (!openapi31) { |
122 | | - // handle ref schema serialization skipping all other props |
123 | | - mapper.registerModule(new SimpleModule() { |
124 | | - @Override |
125 | | - public void setupModule(SetupContext context) { |
126 | | - super.setupModule(context); |
127 | | - context.addBeanSerializerModifier(new BeanSerializerModifier() { |
128 | | - @Override |
129 | | - public JsonSerializer<?> modifySerializer( |
130 | | - SerializationConfig config, BeanDescription desc, JsonSerializer<?> serializer) { |
131 | | - if (Schema.class.isAssignableFrom(desc.getBeanClass())) { |
132 | | - return new SchemaSerializer((JsonSerializer<Object>) serializer); |
133 | | - } else if (MediaType.class.isAssignableFrom(desc.getBeanClass())) { |
134 | | - return new MediaTypeSerializer((JsonSerializer<Object>) serializer); |
135 | | - } else if (Example.class.isAssignableFrom(desc.getBeanClass())) { |
136 | | - return new ExampleSerializer((JsonSerializer<Object>) serializer); |
| 138 | + switch (specVersion) { |
| 139 | + case V30: |
| 140 | + // handle ref schema serialization skipping all other props |
| 141 | + mapper.registerModule(new SimpleModule() { |
| 142 | + @Override |
| 143 | + public void setupModule(SetupContext context) { |
| 144 | + super.setupModule(context); |
| 145 | + context.addBeanSerializerModifier(new BeanSerializerModifier() { |
| 146 | + @Override |
| 147 | + public JsonSerializer<?> modifySerializer( |
| 148 | + SerializationConfig config, BeanDescription desc, JsonSerializer<?> serializer) { |
| 149 | + if (Schema.class.isAssignableFrom(desc.getBeanClass())) { |
| 150 | + return new SchemaSerializer((JsonSerializer<Object>) serializer); |
| 151 | + } else if (MediaType.class.isAssignableFrom(desc.getBeanClass())) { |
| 152 | + return new MediaTypeSerializer((JsonSerializer<Object>) serializer); |
| 153 | + } else if (Example.class.isAssignableFrom(desc.getBeanClass())) { |
| 154 | + return new ExampleSerializer((JsonSerializer<Object>) serializer); |
| 155 | + } |
| 156 | + return serializer; |
137 | 157 | } |
138 | | - return serializer; |
139 | | - } |
140 | | - }); |
141 | | - } |
142 | | - }); |
143 | | - } else { |
144 | | - mapper.registerModule(new SimpleModule() { |
145 | | - @Override |
146 | | - public void setupModule(SetupContext context) { |
147 | | - super.setupModule(context); |
148 | | - context.addBeanSerializerModifier(new BeanSerializerModifier() { |
149 | | - @Override |
150 | | - public JsonSerializer<?> modifySerializer( |
151 | | - SerializationConfig config, BeanDescription desc, JsonSerializer<?> serializer) { |
152 | | - if (Schema.class.isAssignableFrom(desc.getBeanClass())) { |
153 | | - return new Schema31Serializer((JsonSerializer<Object>) serializer); |
154 | | - } else if (MediaType.class.isAssignableFrom(desc.getBeanClass())) { |
155 | | - return new MediaTypeSerializer((JsonSerializer<Object>) serializer); |
156 | | - } else if (Example.class.isAssignableFrom(desc.getBeanClass())) { |
157 | | - return new ExampleSerializer((JsonSerializer<Object>) serializer); |
| 158 | + }); |
| 159 | + } |
| 160 | + }); |
| 161 | + break; |
| 162 | + case V31: |
| 163 | + mapper.registerModule(new SimpleModule() { |
| 164 | + @Override |
| 165 | + public void setupModule(SetupContext context) { |
| 166 | + super.setupModule(context); |
| 167 | + context.addBeanSerializerModifier(new BeanSerializerModifier() { |
| 168 | + @Override |
| 169 | + public JsonSerializer<?> modifySerializer( |
| 170 | + SerializationConfig config, BeanDescription desc, JsonSerializer<?> serializer) { |
| 171 | + if (Schema.class.isAssignableFrom(desc.getBeanClass())) { |
| 172 | + return new Schema31Serializer((JsonSerializer<Object>) serializer); |
| 173 | + } else if (MediaType.class.isAssignableFrom(desc.getBeanClass())) { |
| 174 | + return new MediaTypeSerializer((JsonSerializer<Object>) serializer); |
| 175 | + } else if (Example.class.isAssignableFrom(desc.getBeanClass())) { |
| 176 | + return new ExampleSerializer((JsonSerializer<Object>) serializer); |
| 177 | + } |
| 178 | + return serializer; |
158 | 179 | } |
159 | | - return serializer; |
160 | | - } |
161 | | - }); |
162 | | - } |
163 | | - }); |
| 180 | + }); |
| 181 | + } |
| 182 | + }); |
| 183 | + break; |
164 | 184 | } |
165 | 185 |
|
166 | | - if (!openapi31) { |
167 | | - Module deserializerModule = new DeserializationModule(); |
168 | | - mapper.registerModule(deserializerModule); |
169 | | - } else { |
170 | | - Module deserializerModule = new DeserializationModule31(); |
171 | | - mapper.registerModule(deserializerModule); |
| 186 | + switch (specVersion) { |
| 187 | + case V30: |
| 188 | + mapper.registerModule(new DeserializationModule()); |
| 189 | + break; |
| 190 | + case V31: |
| 191 | + mapper.registerModule(new DeserializationModule31()); |
| 192 | + break; |
172 | 193 | } |
173 | 194 | mapper.registerModule(new JavaTimeModule()); |
174 | 195 |
|
@@ -202,21 +223,24 @@ public JsonSerializer<?> modifySerializer( |
202 | 223 | sourceMixins.put(Callback.class, ExtensionsMixin.class); |
203 | 224 |
|
204 | 225 |
|
205 | | - if (!openapi31) { |
206 | | - sourceMixins.put(Schema.class, SchemaMixin.class); |
207 | | - sourceMixins.put(DateSchema.class, DateSchemaMixin.class); |
208 | | - sourceMixins.put(Components.class, ComponentsMixin.class); |
209 | | - sourceMixins.put(Info.class, InfoMixin.class); |
210 | | - sourceMixins.put(License.class, LicenseMixin.class); |
211 | | - sourceMixins.put(OpenAPI.class, OpenAPIMixin.class); |
212 | | - sourceMixins.put(Discriminator.class, DiscriminatorMixin.class); |
213 | | - } else { |
214 | | - sourceMixins.put(Info.class, ExtensionsMixin.class); |
215 | | - sourceMixins.put(Schema.class, Schema31Mixin.class); |
216 | | - sourceMixins.put(Components.class, Components31Mixin.class); |
217 | | - sourceMixins.put(OpenAPI.class, OpenAPI31Mixin.class); |
218 | | - sourceMixins.put(DateSchema.class, DateSchemaMixin.class); |
219 | | - sourceMixins.put(Discriminator.class, Discriminator31Mixin.class); |
| 226 | + switch (specVersion) { |
| 227 | + case V30: |
| 228 | + sourceMixins.put(Schema.class, SchemaMixin.class); |
| 229 | + sourceMixins.put(DateSchema.class, DateSchemaMixin.class); |
| 230 | + sourceMixins.put(Components.class, ComponentsMixin.class); |
| 231 | + sourceMixins.put(Info.class, InfoMixin.class); |
| 232 | + sourceMixins.put(License.class, LicenseMixin.class); |
| 233 | + sourceMixins.put(OpenAPI.class, OpenAPIMixin.class); |
| 234 | + sourceMixins.put(Discriminator.class, DiscriminatorMixin.class); |
| 235 | + break; |
| 236 | + case V31: |
| 237 | + sourceMixins.put(Info.class, ExtensionsMixin.class); |
| 238 | + sourceMixins.put(Schema.class, Schema31Mixin.class); |
| 239 | + sourceMixins.put(Components.class, Components31Mixin.class); |
| 240 | + sourceMixins.put(OpenAPI.class, OpenAPI31Mixin.class); |
| 241 | + sourceMixins.put(DateSchema.class, DateSchemaMixin.class); |
| 242 | + sourceMixins.put(Discriminator.class, Discriminator31Mixin.class); |
| 243 | + break; |
220 | 244 | } |
221 | 245 | mapper.setMixIns(sourceMixins); |
222 | 246 | mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); |
|
0 commit comments