Skip to content

Commit 2dc72a2

Browse files
committed
Serialization to openapi of org.springframework.data.domain.Sort is wrong for Spring Boot >2.x. Fixes #2725
1 parent 618a836 commit 2dc72a2

File tree

5 files changed

+254
-117
lines changed

5 files changed

+254
-117
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocSortConfiguration.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.util.Optional;
2828

2929
import org.springdoc.core.converters.SortOpenAPIConverter;
30-
import org.springdoc.core.converters.models.SortObject;
3130
import org.springdoc.core.customizers.DataRestDelegatingMethodParameterCustomizer;
3231
import org.springdoc.core.providers.ObjectMapperProvider;
3332
import org.springdoc.core.providers.RepositoryRestConfigurationProvider;
@@ -71,7 +70,6 @@ public class SpringDocSortConfiguration {
7170
@Lazy(false)
7271
SortOpenAPIConverter sortOpenAPIConverter(ObjectMapperProvider objectMapperProvider) {
7372
getConfig().replaceParameterObjectWithClass(org.springframework.data.domain.Sort.class, org.springdoc.core.converters.models.Sort.class);
74-
getConfig().replaceWithClass(org.springframework.data.domain.Sort.class, SortObject.class);
7573
return new SortOpenAPIConverter(objectMapperProvider);
7674
}
7775

springdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/app24.json

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -105,20 +105,17 @@
105105
"format": "int32"
106106
},
107107
"sort": {
108-
"type": "array",
109-
"items": {
110-
"$ref": "#/components/schemas/SortObject"
111-
}
112-
},
113-
"first": {
114-
"type": "boolean"
108+
"$ref": "#/components/schemas/SortObject"
115109
},
116110
"last": {
117111
"type": "boolean"
118112
},
119113
"pageable": {
120114
"$ref": "#/components/schemas/PageableObject"
121115
},
116+
"first": {
117+
"type": "boolean"
118+
},
122119
"numberOfElements": {
123120
"type": "integer",
124121
"format": "int32"
@@ -136,16 +133,7 @@
136133
"format": "int64"
137134
},
138135
"sort": {
139-
"type": "array",
140-
"items": {
141-
"$ref": "#/components/schemas/SortObject"
142-
}
143-
},
144-
"paged": {
145-
"type": "boolean"
146-
},
147-
"unpaged": {
148-
"type": "boolean"
136+
"$ref": "#/components/schemas/SortObject"
149137
},
150138
"pageNumber": {
151139
"type": "integer",
@@ -154,25 +142,25 @@
154142
"pageSize": {
155143
"type": "integer",
156144
"format": "int32"
145+
},
146+
"paged": {
147+
"type": "boolean"
148+
},
149+
"unpaged": {
150+
"type": "boolean"
157151
}
158152
}
159153
},
160154
"SortObject": {
161155
"type": "object",
162156
"properties": {
163-
"direction": {
164-
"type": "string"
165-
},
166-
"nullHandling": {
167-
"type": "string"
168-
},
169-
"ascending": {
157+
"empty": {
170158
"type": "boolean"
171159
},
172-
"property": {
173-
"type": "string"
160+
"sorted": {
161+
"type": "boolean"
174162
},
175-
"ignoreCase": {
163+
"unsorted": {
176164
"type": "boolean"
177165
}
178166
}

springdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/app27.json

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,7 @@
6363
"format": "int64"
6464
},
6565
"sort": {
66-
"type": "array",
67-
"items": {
68-
"$ref": "#/components/schemas/SortObject"
69-
}
70-
},
71-
"paged": {
72-
"type": "boolean"
73-
},
74-
"unpaged": {
75-
"type": "boolean"
66+
"$ref": "#/components/schemas/SortObject"
7667
},
7768
"pageNumber": {
7869
"type": "integer",
@@ -81,25 +72,25 @@
8172
"pageSize": {
8273
"type": "integer",
8374
"format": "int32"
75+
},
76+
"paged": {
77+
"type": "boolean"
78+
},
79+
"unpaged": {
80+
"type": "boolean"
8481
}
8582
}
8683
},
8784
"SortObject": {
8885
"type": "object",
8986
"properties": {
90-
"direction": {
91-
"type": "string"
92-
},
93-
"nullHandling": {
94-
"type": "string"
95-
},
96-
"ascending": {
87+
"empty": {
9788
"type": "boolean"
9889
},
99-
"property": {
100-
"type": "string"
90+
"sorted": {
91+
"type": "boolean"
10192
},
102-
"ignoreCase": {
93+
"unsorted": {
10394
"type": "boolean"
10495
}
10596
}

springdoc-openapi-tests/springdoc-openapi-hateoas-tests/src/test/resources/results/app10-direct.json

Lines changed: 46 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -219,15 +219,6 @@
219219
"type": "integer",
220220
"format": "int64"
221221
},
222-
"pageable": {
223-
"$ref": "#/components/schemas/PageableObject"
224-
},
225-
"first": {
226-
"type": "boolean"
227-
},
228-
"last": {
229-
"type": "boolean"
230-
},
231222
"size": {
232223
"type": "integer",
233224
"format": "int32"
@@ -243,10 +234,16 @@
243234
"format": "int32"
244235
},
245236
"sort": {
246-
"type": "array",
247-
"items": {
248-
"$ref": "#/components/schemas/SortObject"
249-
}
237+
"$ref": "#/components/schemas/SortObject"
238+
},
239+
"pageable": {
240+
"$ref": "#/components/schemas/PageableObject"
241+
},
242+
"first": {
243+
"type": "boolean"
244+
},
245+
"last": {
246+
"type": "boolean"
250247
},
251248
"numberOfElements": {
252249
"type": "integer",
@@ -260,48 +257,39 @@
260257
"PageableObject": {
261258
"type": "object",
262259
"properties": {
260+
"offset": {
261+
"type": "integer",
262+
"format": "int64"
263+
},
264+
"sort": {
265+
"$ref": "#/components/schemas/SortObject"
266+
},
263267
"paged": {
264268
"type": "boolean"
265269
},
266-
"pageNumber": {
267-
"type": "integer",
268-
"format": "int32"
270+
"unpaged": {
271+
"type": "boolean"
269272
},
270273
"pageSize": {
271274
"type": "integer",
272275
"format": "int32"
273276
},
274-
"offset": {
277+
"pageNumber": {
275278
"type": "integer",
276-
"format": "int64"
277-
},
278-
"sort": {
279-
"type": "array",
280-
"items": {
281-
"$ref": "#/components/schemas/SortObject"
282-
}
283-
},
284-
"unpaged": {
285-
"type": "boolean"
279+
"format": "int32"
286280
}
287281
}
288282
},
289283
"SortObject": {
290284
"type": "object",
291285
"properties": {
292-
"direction": {
293-
"type": "string"
294-
},
295-
"nullHandling": {
296-
"type": "string"
297-
},
298-
"ascending": {
286+
"empty": {
299287
"type": "boolean"
300288
},
301-
"property": {
302-
"type": "string"
289+
"unsorted": {
290+
"type": "boolean"
303291
},
304-
"ignoreCase": {
292+
"sorted": {
305293
"type": "boolean"
306294
}
307295
}
@@ -317,15 +305,6 @@
317305
"type": "integer",
318306
"format": "int64"
319307
},
320-
"pageable": {
321-
"$ref": "#/components/schemas/PageableObject"
322-
},
323-
"first": {
324-
"type": "boolean"
325-
},
326-
"last": {
327-
"type": "boolean"
328-
},
329308
"size": {
330309
"type": "integer",
331310
"format": "int32"
@@ -341,10 +320,16 @@
341320
"format": "int32"
342321
},
343322
"sort": {
344-
"type": "array",
345-
"items": {
346-
"$ref": "#/components/schemas/SortObject"
347-
}
323+
"$ref": "#/components/schemas/SortObject"
324+
},
325+
"pageable": {
326+
"$ref": "#/components/schemas/PageableObject"
327+
},
328+
"first": {
329+
"type": "boolean"
330+
},
331+
"last": {
332+
"type": "boolean"
348333
},
349334
"numberOfElements": {
350335
"type": "integer",
@@ -366,15 +351,6 @@
366351
"type": "integer",
367352
"format": "int64"
368353
},
369-
"pageable": {
370-
"$ref": "#/components/schemas/PageableObject"
371-
},
372-
"first": {
373-
"type": "boolean"
374-
},
375-
"last": {
376-
"type": "boolean"
377-
},
378354
"size": {
379355
"type": "integer",
380356
"format": "int32"
@@ -390,10 +366,16 @@
390366
"format": "int32"
391367
},
392368
"sort": {
393-
"type": "array",
394-
"items": {
395-
"$ref": "#/components/schemas/SortObject"
396-
}
369+
"$ref": "#/components/schemas/SortObject"
370+
},
371+
"pageable": {
372+
"$ref": "#/components/schemas/PageableObject"
373+
},
374+
"first": {
375+
"type": "boolean"
376+
},
377+
"last": {
378+
"type": "boolean"
397379
},
398380
"numberOfElements": {
399381
"type": "integer",
@@ -406,4 +388,4 @@
406388
}
407389
}
408390
}
409-
}
391+
}

0 commit comments

Comments
 (0)