Skip to content

Commit 1d448db

Browse files
author
bnasslahsen
committed
project review
1 parent adaf6b8 commit 1d448db

File tree

3 files changed

+38
-29
lines changed

3 files changed

+38
-29
lines changed

springdoc-openapi-data-rest/src/main/java/org/springdoc/core/HalProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222

2323
import io.swagger.v3.core.converter.ModelConverters;
2424
import io.swagger.v3.core.util.Json;
25-
2625
import org.springdoc.core.hal.CollectionModelContentConverter;
26+
2727
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
2828
import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
2929

springdoc-openapi-data-rest/src/main/java/org/springdoc/core/SpringDocDataRestConfiguration.java

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@
2929
import io.swagger.v3.oas.models.media.StringSchema;
3030
import org.springdoc.core.converters.Pageable;
3131
import org.springdoc.core.customizers.OpenApiCustomiser;
32-
3332
import org.springdoc.core.hal.RepresentationModelLinksOASMixin;
33+
34+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3435
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
3536
import org.springframework.context.annotation.Bean;
3637
import org.springframework.context.annotation.Configuration;
@@ -51,31 +52,36 @@ public class SpringDocDataRestConfiguration {
5152
.replaceWithClass(org.springframework.data.domain.PageRequest.class,Pageable.class);
5253
}
5354

54-
@Bean
55-
public HalProvider halProvider(RepositoryRestConfiguration repositoryRestConfiguration) {
56-
return new HalProvider(repositoryRestConfiguration);
57-
}
55+
@Configuration
56+
@ConditionalOnClass(RepositoryRestConfiguration.class)
57+
class HalProviderConfiguration {
5858

59-
/**
60-
* Registers an OpenApiCustomiser and a jackson mixin to ensure the definition of `Links` matches the serialized
61-
* output. This is done because the customer serializer converts the data to a map before serializing it.
62-
*
63-
* @see org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)
64-
*/
65-
@Bean
66-
public OpenApiCustomiser linksSchemaCustomiser(RepositoryRestConfiguration repositoryRestConfiguration) {
67-
if (!repositoryRestConfiguration.useHalAsDefaultJsonMediaType()) {
68-
return openApi -> {};
69-
}
70-
Json.mapper().addMixIn(RepresentationModel.class, RepresentationModelLinksOASMixin.class);
59+
@Bean
60+
public HalProvider halProvider(RepositoryRestConfiguration repositoryRestConfiguration) {
61+
return new HalProvider(repositoryRestConfiguration);
62+
}
7163

72-
ResolvedSchema resolvedLinkSchema = ModelConverters.getInstance()
73-
.resolveAsResolvedSchema(new AnnotatedType(Link.class));
64+
/**
65+
* Registers an OpenApiCustomiser and a jackson mixin to ensure the definition of `Links` matches the serialized
66+
* output. This is done because the customer serializer converts the data to a map before serializing it.
67+
*
68+
* @see org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)
69+
*/
70+
@Bean
71+
public OpenApiCustomiser linksSchemaCustomiser(RepositoryRestConfiguration repositoryRestConfiguration) {
72+
if (!repositoryRestConfiguration.useHalAsDefaultJsonMediaType()) {
73+
return openApi -> {};
74+
}
75+
Json.mapper().addMixIn(RepresentationModel.class, RepresentationModelLinksOASMixin.class);
7476

75-
return openApi -> openApi
76-
.schema("Link", resolvedLinkSchema.schema)
77-
.schema("Links", new MapSchema()
78-
.additionalProperties(new StringSchema())
79-
.additionalProperties(new ObjectSchema().$ref("#/components/schemas/Link")));
80-
}
77+
ResolvedSchema resolvedLinkSchema = ModelConverters.getInstance()
78+
.resolveAsResolvedSchema(new AnnotatedType(Link.class));
79+
80+
return openApi -> openApi
81+
.schema("Link", resolvedLinkSchema.schema)
82+
.schema("Links", new MapSchema()
83+
.additionalProperties(new StringSchema())
84+
.additionalProperties(new ObjectSchema().$ref("#/components/schemas/Link")));
85+
}
86+
}
8187
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,12 @@
172172
"type": "object",
173173
"properties": {
174174
"_embedded": {
175-
"type": "array",
176-
"items": {
177-
"$ref": "#/components/schemas/EntityModelEmployee"
175+
"type": "object",
176+
"additionalProperties": {
177+
"type": "array",
178+
"items": {
179+
"$ref": "#/components/schemas/EntityModelEmployee"
180+
}
178181
}
179182
},
180183
"_links": {

0 commit comments

Comments
 (0)