Skip to content

Commit 5d6ecc0

Browse files
committed
OperationCustomizer is not working with Spring Data REST. springdoc#2062
1 parent a7f685f commit 5d6ecc0

File tree

3 files changed

+42
-9
lines changed

3 files changed

+42
-9
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import org.slf4j.LoggerFactory;
7777
import org.springdoc.core.annotations.RouterOperations;
7878
import org.springdoc.core.customizers.DataRestRouterOperationCustomizer;
79+
import org.springdoc.core.customizers.OpenApiLocaleCustomizer;
7980
import org.springdoc.core.customizers.OperationCustomizer;
8081
import org.springdoc.core.customizers.RouterOperationCustomizer;
8182
import org.springdoc.core.customizers.SpringDocCustomizers;
@@ -193,8 +194,12 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
193194
*/
194195
protected OpenAPIService openAPIService;
195196

197+
/**
198+
* The Spring doc customizers.
199+
*/
196200
protected final SpringDocCustomizers springDocCustomizers;
197201

202+
198203
/**
199204
* Instantiates a new Abstract open api resource.
200205
*
@@ -353,7 +358,7 @@ protected synchronized OpenAPI getOpenApi(Locale locale) {
353358
LOGGER.warn("Json Processing Exception occurred: {}", e.getMessage());
354359
}
355360

356-
springDocCustomizers.getOpenApiLocaleCustomizers().values().forEach(openApiLocaleCustomizer -> openApiLocaleCustomizer.customise(openAPI, finalLocale));
361+
openAPIService.getContext().getBeansOfType(OpenApiLocaleCustomizer.class).values().forEach(openApiLocaleCustomizer -> openApiLocaleCustomizer.customise(openAPI, finalLocale));
357362
springDocCustomizers.getOpenApiCustomizers().ifPresent(apiCustomizers -> apiCustomizers.forEach(openApiCustomizer -> openApiCustomizer.customise(openAPI)));
358363
if (!CollectionUtils.isEmpty(openAPI.getServers()) && !openAPI.getServers().equals(serversCopy))
359364
openAPIService.setServersPresent(true);

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/customizers/SpringDocCustomizers.java

+30-8
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
*/
2424
package org.springdoc.core.customizers;
2525

26-
import java.util.HashMap;
2726
import java.util.List;
2827
import java.util.Map;
2928
import java.util.Objects;
@@ -40,6 +39,8 @@
4039
import static org.springdoc.core.utils.Constants.LINKS_SCHEMA_CUSTOMISER;
4140

4241
/**
42+
* The type Spring doc customizers.
43+
*
4344
* @author bnasslahsen
4445
*/
4546
public class SpringDocCustomizers implements ApplicationContextAware, InitializingBean {
@@ -65,7 +66,9 @@ public class SpringDocCustomizers implements ApplicationContextAware, Initializi
6566
*/
6667
private final Optional<List<DataRestRouterOperationCustomizer>> dataRestRouterOperationCustomizers;
6768

68-
69+
/**
70+
* The Context.
71+
*/
6972
private ApplicationContext context;
7073

7174
/**
@@ -113,28 +116,47 @@ public SpringDocCustomizers(Optional<List<OpenApiCustomizer>> openApiCustomizers
113116
this.dataRestRouterOperationCustomizers = Optional.empty();
114117
}
115118

119+
/**
120+
* Gets open api customizers.
121+
*
122+
* @return the open api customizers
123+
*/
116124
public Optional<List<OpenApiCustomizer>> getOpenApiCustomizers() {
117125
return openApiCustomizers;
118126
}
119127

120-
public Map<String, OpenApiLocaleCustomizer> getOpenApiLocaleCustomizers() {
121-
if (context != null)
122-
return context.getBeansOfType(OpenApiLocaleCustomizer.class);
123-
return new HashMap<>();
124-
}
125-
128+
/**
129+
* Gets operation customizers.
130+
*
131+
* @return the operation customizers
132+
*/
126133
public Optional<List<OperationCustomizer>> getOperationCustomizers() {
127134
return operationCustomizers;
128135
}
129136

137+
/**
138+
* Gets router operation customizers.
139+
*
140+
* @return the router operation customizers
141+
*/
130142
public Optional<List<RouterOperationCustomizer>> getRouterOperationCustomizers() {
131143
return routerOperationCustomizers;
132144
}
133145

146+
/**
147+
* Gets data rest router operation customizers.
148+
*
149+
* @return the data rest router operation customizers
150+
*/
134151
public Optional<List<DataRestRouterOperationCustomizer>> getDataRestRouterOperationCustomizers() {
135152
return dataRestRouterOperationCustomizers;
136153
}
137154

155+
/**
156+
* Gets method filters.
157+
*
158+
* @return the method filters
159+
*/
138160
public Optional<List<OpenApiMethodFilter>> getMethodFilters() {
139161
return methodFilters;
140162
}

springdoc-openapi-starter-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.springdoc.core.service.OperationService;
6060

6161
import org.springframework.beans.factory.ObjectFactory;
62+
import org.springframework.context.ApplicationContext;
6263
import org.springframework.test.util.ReflectionTestUtils;
6364
import org.springframework.web.bind.annotation.RequestMethod;
6465

@@ -106,6 +107,9 @@ class AbstractOpenApiResourceTest {
106107
@Mock
107108
private SpringDocProviders springDocProviders;
108109

110+
@Mock
111+
private ApplicationContext context;
112+
109113
private OpenAPI openAPI;
110114

111115
private AbstractOpenApiResource resource;
@@ -118,6 +122,8 @@ public void setUp() {
118122
ReflectionTestUtils.setField(openAPIService, "serverBaseUrlCustomizers", Optional.empty());
119123

120124
when(openAPIService.build(any())).thenReturn(openAPI);
125+
when(openAPIService.getContext()).thenReturn(context);
126+
121127
when(openAPIBuilderObjectFactory.getObject()).thenReturn(openAPIService);
122128
when(springDocProviders.jsonMapper()).thenReturn(Json.mapper());
123129
}

0 commit comments

Comments
 (0)