Skip to content

Commit 65d8a3b

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 914896a + 168c4c9 commit 65d8a3b

File tree

57 files changed

+397
-244
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+397
-244
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ addons:
1111
organization: "springdoc-openapi"
1212
token:
1313
secure: "S5zeA+Vvbe7LG450OAtd5TrBRL8fhaWgJjzAp3RzS797++2xrN92jI74h5NL0MiYBd6NKoWql1WJaMKHCfo/EJ6RdExdw71126B2k061iK54y8pxom+ADFigKgkVzHgnV28uBioC2DIcVvRDk8WkX6IZ9I6C72TzWapXrlCnRkSY1lsfOwvqahTYheaDzRKWN5WoBm8M63IiciMz21SSrdm20fjQeY90EI0EfKn0jjJWL8WKmDa98MeSsJWBwR964ICKRvRq9CGTjTZVhL+D0VYt4tS7kpoN9QatL6SL/octL6jXhgGqnFu8AWRwe1RX7hM9jjDLCkXrz6pr9+t4ts8lo7CcG1YmO5A0vRZYvdO9Y98REEAfU17Y21YjWwl2H41BuHGjJ/vSyVQ1ASE4Q7hBdCTJYNVr+PtMIHR6WFuNIBgA23sYvEQhBolnLpVfs3q5CjVwV3r6wx0ubaRkLlv0MTphic/lGQPFfaVdjYpBCKAr+G6k7t8elpMCf1oeVoopGM6y1WRSCmq2nZyf1n9oNXd4BcFvwnaQwQaEAPnTcZw1F4O6Z0Tc5BJOvJ5pQ79d3EJaOGyDJmezKBxV6mgeIH1ILkWc6nKf1JnqE4v8yCdRsvsTAPcIEn66jqTLpo5uvERroodHqNKP9aSbxvyHp8nkSLb35+w8NpRMlEg="
14-
14+
1515
script:
1616
- mvn clean package --settings settings.xml
1717

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [1.2.22] -
8+
### Added
9+
- New annotation @PageableAsQueryParam for better Pageable support
10+
- Feature to serve from the same swagger-ui both, REST APIs that are deployed within the same application and external REST APIs #309
11+
- Customizing operations, parameters and properties available through an SPI #293
12+
### Changed
13+
- Autoconfigurations will not be loaded if classpath does not contain mvc/reactive dependencies or application is not web application #299
14+
### Fixed
15+
- Corrected the support of oauth2-redirect.html and oauth2RedirectUrl #311
16+
17+
718
## [1.2.21] -
819
### Added
920
- Springdoc, Callable support #297

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>org.springdoc</groupId>
55
<artifactId>springdoc-openapi</artifactId>
6-
<version>1.2.22-SNAPSHOT</version>
6+
<version>1.2.23-SNAPSHOT</version>
77
<packaging>pom</packaging>
88
<name>Spring openapi documentation generator</name>
99
<description>Spring openapi documentation generator</description>

springdoc-openapi-common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.springdoc</groupId>
77
<artifactId>springdoc-openapi</artifactId>
8-
<version>1.2.22-SNAPSHOT</version>
8+
<version>1.2.23-SNAPSHOT</version>
99
</parent>
1010
<dependencies>
1111
<dependency>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.slf4j.Logger;
1010
import org.slf4j.LoggerFactory;
1111
import org.springdoc.core.*;
12+
import org.springdoc.core.customizers.OpenApiCustomiser;
1213
import org.springframework.beans.factory.annotation.Value;
1314
import org.springframework.core.annotation.AnnotationUtils;
1415
import org.springframework.util.AntPathMatcher;

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractParameterBuilder.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter paramete
126126
if (parameterDoc.allowReserved()) {
127127
parameter.setAllowReserved(parameterDoc.allowReserved());
128128
}
129+
setSchema(parameterDoc, components, jsonView, parameter);
130+
setExamples(parameterDoc, parameter);
131+
setExtensions(parameterDoc, parameter);
132+
setParameterStyle(parameter, parameterDoc);
133+
setParameterExplode(parameter, parameterDoc);
134+
135+
return parameter;
136+
}
137+
138+
private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Components components, JsonView jsonView, Parameter parameter) {
129139
if (StringUtils.isNotBlank(parameterDoc.ref())) {
130140
parameter.$ref(parameterDoc.ref());
131141
} else {
@@ -144,13 +154,6 @@ Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter paramete
144154
}
145155
parameter.setSchema(schema);
146156
}
147-
148-
setExamples(parameterDoc, parameter);
149-
setExtensions(parameterDoc, parameter);
150-
setParameterStyle(parameter, parameterDoc);
151-
setParameterExplode(parameter, parameterDoc);
152-
153-
return parameter;
154157
}
155158

156159
Schema calculateSchema(Components components, java.lang.reflect.Parameter parameter, String paramName,

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestBuilder.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import io.swagger.v3.oas.models.parameters.Parameter;
99
import org.apache.commons.lang3.StringUtils;
1010
import org.springdoc.core.RequestInfo.ParameterType;
11-
import org.springdoc.core.customizer.OperationCustomizer;
12-
import org.springdoc.core.customizer.ParameterCustomizer;
11+
import org.springdoc.core.customizers.OperationCustomizer;
12+
import org.springdoc.core.customizers.ParameterCustomizer;
1313
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
1414
import org.springframework.core.annotation.AnnotatedElementUtils;
1515
import org.springframework.core.annotation.AnnotationUtils;
@@ -67,12 +67,12 @@ public abstract class AbstractRequestBuilder {
6767
private final AbstractParameterBuilder parameterBuilder;
6868
private final RequestBodyBuilder requestBodyBuilder;
6969
private final OperationBuilder operationBuilder;
70-
private final List<OperationCustomizer> operationCustomizers;
71-
private final List<ParameterCustomizer> parameterCustomizers;
70+
private final Optional<List<OperationCustomizer>> operationCustomizers;
71+
private final Optional<List<ParameterCustomizer>> parameterCustomizers;
7272

7373
protected AbstractRequestBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
74-
OperationBuilder operationBuilder, List<OperationCustomizer> operationCustomizers,
75-
List<ParameterCustomizer> parameterCustomizers) {
74+
OperationBuilder operationBuilder, Optional<List<OperationCustomizer>> operationCustomizers,
75+
Optional<List<ParameterCustomizer>> parameterCustomizers) {
7676
super();
7777
this.parameterBuilder = parameterBuilder;
7878
this.requestBodyBuilder = requestBodyBuilder;
@@ -164,25 +164,15 @@ public Operation build(Components components, HandlerMethod handlerMethod, Reque
164164
}
165165

166166
protected Operation customiseOperation(Operation operation, HandlerMethod handlerMethod) {
167-
if (!CollectionUtils.isEmpty(operationCustomizers)) {
168-
for (OperationCustomizer customizer : operationCustomizers) {
169-
operation = customizer.customize(operation, handlerMethod);
170-
}
171-
}
167+
operationCustomizers.ifPresent(customizers -> customizers.forEach(customizer -> customizer.customize(operation, handlerMethod)));
172168
return operation;
173169
}
174170

175171
protected Parameter customiseParameter(Parameter parameter, ParameterInfo parameterInfo, HandlerMethod handlerMethod) {
176-
if (!CollectionUtils.isEmpty(parameterCustomizers)) {
177-
for (ParameterCustomizer customizer : parameterCustomizers) {
178-
parameter = customizer.customize(parameter, parameterInfo.getParameter(), handlerMethod);
179-
}
180-
}
172+
parameterCustomizers.ifPresent(customizers -> customizers.forEach(customizer -> customizer.customize(parameter, parameterInfo.getParameter(), handlerMethod)));
181173
return parameter;
182174
}
183175

184-
;
185-
186176
protected boolean isParamToIgnore(java.lang.reflect.Parameter parameter) {
187177
if (parameter.isAnnotationPresent(PathVariable.class)) {
188178
return false;

springdoc-openapi-common/src/main/java/org/springdoc/core/GroupedOpenApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.springdoc.core;
22

3-
import org.springdoc.api.OpenApiCustomiser;
3+
import org.springdoc.core.customizers.OpenApiCustomiser;
44
import org.springframework.util.CollectionUtils;
55

66
import java.util.ArrayList;
@@ -46,10 +46,10 @@ public List<OpenApiCustomiser> getOpenApiCustomisers() {
4646
}
4747

4848
public static class Builder {
49+
private final List<OpenApiCustomiser> openApiCustomisers = new ArrayList<>();
4950
private String group;
5051
private List<String> pathsToMatch;
5152
private List<String> packagesToScan;
52-
private final List<OpenApiCustomiser> openApiCustomisers = new ArrayList<>();
5353

5454
private Builder() {
5555
// use static factory method in parent class

springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
import io.swagger.v3.oas.models.OpenAPI;
55
import org.springdoc.core.converters.ObjectNodeConverter;
66
import org.springdoc.core.converters.PropertyCustomizingConverter;
7-
import org.springdoc.core.customizer.PropertyCustomizer;
7+
import org.springdoc.core.customizers.PropertyCustomizer;
88
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
99
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
10+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
1011
import org.springframework.context.ApplicationContext;
1112
import org.springframework.context.annotation.Bean;
1213
import org.springframework.context.annotation.Configuration;
@@ -32,7 +33,7 @@ ObjectNodeConverter objectNodeConverter() {
3233
}
3334

3435
@Bean
35-
PropertyCustomizingConverter propertyCustomizingConverter(List<PropertyCustomizer> customizers){
36+
PropertyCustomizingConverter propertyCustomizingConverter(Optional<List<PropertyCustomizer>> customizers) {
3637
return new PropertyCustomizingConverter(customizers);
3738
}
3839

@@ -43,10 +44,11 @@ IgnoredParameterAnnotationsDefault ignoredParameterAnnotationsDefault() {
4344

4445
@Bean
4546
public OpenAPIBuilder openAPIBuilder(Optional<OpenAPI> openAPI, ApplicationContext context, SecurityParser securityParser, List<ModelConverter> modelConverters) {
46-
return new OpenAPIBuilder(openAPI, context, securityParser,modelConverters);
47+
return new OpenAPIBuilder(openAPI, context, securityParser, modelConverters);
4748
}
4849

4950
@Bean
51+
@ConditionalOnWebApplication
5052
public OperationBuilder operationBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
5153
SecurityParser securityParser, OpenAPIBuilder openAPIBuilder, PropertyResolverUtils propertyResolverUtils) {
5254
return new OperationBuilder(parameterBuilder, requestBodyBuilder,
@@ -59,6 +61,7 @@ public PropertyResolverUtils propertyResolverUtils(ConfigurableBeanFactory facto
5961
}
6062

6163
@Bean
64+
@ConditionalOnWebApplication
6265
public RequestBodyBuilder requestBodyBuilder(AbstractParameterBuilder parameterBuilder) {
6366
return new RequestBodyBuilder(parameterBuilder);
6467
}

springdoc-openapi-common/src/main/java/org/springdoc/core/SwaggerUiConfigProperties.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.context.annotation.Configuration;
99
import org.springframework.util.CollectionUtils;
1010

11+
import java.net.URL;
1112
import java.util.ArrayList;
1213
import java.util.List;
1314
import java.util.Map;
@@ -116,6 +117,11 @@ public static void addGroup(String group) {
116117
swaggerUrls.add(swaggerUrl);
117118
}
118119

120+
public static void addGroup(String group, String url) {
121+
SwaggerUrl swaggerUrl = new SwaggerUrl(group, url);
122+
swaggerUrls.add(swaggerUrl);
123+
}
124+
119125
public static List<SwaggerUrl> getSwaggerUrls() {
120126
return swaggerUrls;
121127
}
@@ -125,14 +131,18 @@ public static void setSwaggerUrls(List<SwaggerUrl> swaggerUrls) {
125131
}
126132

127133
public static void addUrl(String url) {
128-
swaggerUrls.forEach(elt -> elt.setUrl(url + DEFAULT_PATH_SEPARATOR + elt.getName()));
134+
swaggerUrls.forEach(elt ->
135+
{
136+
if (StringUtils.isEmpty(elt.url))
137+
elt.setUrl(url + DEFAULT_PATH_SEPARATOR + elt.getName());
138+
});
129139
}
130140

131141
public Map<String, Object> getConfigParameters() {
132142
final Map<String, Object> params = new TreeMap<>();
133143
put("layout", layout, params);
134144
put(CONFIG_URL_PROPERTY, configUrl, params);
135-
put( "validatorUrl", validatorUrl, params);
145+
put("validatorUrl", validatorUrl, params);
136146
put("filter", filter, params);
137147
put("deepLinking", this.deepLinking, params);
138148
put("displayOperationId", displayOperationId, params);
@@ -339,10 +349,24 @@ public void setUrl(String url) {
339349
this.url = url;
340350
}
341351

352+
public boolean isValidUrl(String url) {
353+
try {
354+
new URL(url).toURI();
355+
return true;
356+
} catch (Exception e) {
357+
return false;
358+
}
359+
}
360+
342361
static class SwaggerUrl {
343362
private String url;
344363
private String name;
345364

365+
public SwaggerUrl(String group, String url) {
366+
this.url = url;
367+
this.name = group;
368+
}
369+
346370
public SwaggerUrl(String group) {
347371
this.name = group;
348372
}

0 commit comments

Comments
 (0)