Skip to content

Commit 64be230

Browse files
committed
added support for vendor extensions with the use of @Info, removed the skipTags query param from SpringfoxLoaderController
1 parent 4efe2e7 commit 64be230

File tree

5 files changed

+34
-22
lines changed

5 files changed

+34
-22
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ public void init() {
154154

155155
`GET /springfox-loader/api-docs`
156156

157-
Returns the swagger api-docs with [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) enabled.
158-
Also has the option to remove the tags from the json response by adding `?skipTags=true` as a query param.
157+
Returns the swagger api-docs with [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) enabled.
159158

160159
### References
161160
* [Springfox Reference Documentation](http://springfox.github.io/springfox/docs/current/)

src/main/java/com/github/springfox/loader/SpringfoxLoader.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.springfox.loader;
22

3+
import io.swagger.annotations.Extension;
34
import io.swagger.annotations.License;
45
import org.springframework.context.ApplicationContext;
56
import org.springframework.core.annotation.AnnotationUtils;
@@ -118,6 +119,10 @@ Class<?>[] includeControllers() {
118119
return annotation.includeControllers();
119120
}
120121

122+
Extension[] extensions() {
123+
return annotation.value().extensions();
124+
}
125+
121126
String val(String annotation, String prop) {
122127
String annotationValue = annotation;
123128
if (annotation.matches("\\$\\{(.+)}")) {

src/main/java/com/github/springfox/loader/SpringfoxLoaderConfig.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.github.springfox.loader.plugins.LoaderTagProvider;
55
import com.github.springfox.loader.valueproperties.ValuePropertiesController;
66
import com.github.springfox.loader.valueproperties.ValuePropertiesLocator;
7+
import io.swagger.annotations.Extension;
8+
import io.swagger.annotations.ExtensionProperty;
79
import org.springframework.beans.BeansException;
810
import org.springframework.beans.factory.annotation.Autowired;
911
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -20,14 +22,20 @@
2022
import springfox.documentation.builders.PathSelectors;
2123
import springfox.documentation.builders.RequestHandlerSelectors;
2224
import springfox.documentation.service.ApiInfo;
25+
import springfox.documentation.service.ObjectVendorExtension;
26+
import springfox.documentation.service.StringVendorExtension;
27+
import springfox.documentation.service.VendorExtension;
2328
import springfox.documentation.spi.DocumentationType;
2429
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
2530
import springfox.documentation.spring.web.plugins.Docket;
2631
import springfox.documentation.spring.web.readers.operation.DefaultTagsProvider;
2732

2833
import javax.annotation.PostConstruct;
34+
import java.util.Arrays;
2935
import java.util.Collections;
36+
import java.util.List;
3037
import java.util.function.Predicate;
38+
import java.util.stream.Collectors;
3139

3240
@EnableConfigurationProperties
3341
@Configuration
@@ -89,7 +97,25 @@ public Docket api() {
8997

9098
private ApiInfo apiInfo() {
9199
return new ApiInfo(springfoxLoader.getTitle(), springfoxLoader.getDescription(), springfoxLoader.getVersion(),
92-
springfoxLoader.getTermsOfServiceUrl(), springfoxLoader.getContact(), springfoxLoader.getLicense(), springfoxLoader.getLicenseUrl(), Collections.emptyList());
100+
springfoxLoader.getTermsOfServiceUrl(), springfoxLoader.getContact(), springfoxLoader.getLicense(), springfoxLoader.getLicenseUrl(), getVendorExtensions());
101+
}
102+
103+
private List<VendorExtension> getVendorExtensions() {
104+
Extension[] extensions = springfoxLoader.extensions();
105+
if (extensions.length == 1 && StringUtils.isEmpty(extensions[0].name())) {
106+
return Collections.emptyList();
107+
}
108+
109+
return Arrays.stream(extensions).map(extension -> {
110+
ExtensionProperty[] extensionProperties = extension.properties();
111+
List<StringVendorExtension> vendorExtensions = Arrays.stream(extensionProperties).map(property -> new StringVendorExtension(property.name(), property.value())).collect(Collectors.toList());
112+
113+
ObjectVendorExtension vendorExtension = new ObjectVendorExtension(extension.name());
114+
for (StringVendorExtension stringVendorExtension : vendorExtensions) {
115+
vendorExtension.addProperty(stringVendorExtension);
116+
}
117+
return vendorExtension;
118+
}).collect(Collectors.toList());
93119
}
94120

95121
@Bean

src/main/java/com/github/springfox/loader/controller/SpringfoxLoaderController.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.github.springfox.loader.SpringfoxLoaderProps;
44
import com.google.common.collect.Lists;
5-
import com.jayway.jsonpath.JsonPath;
65
import lombok.extern.slf4j.Slf4j;
76
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
87
import org.springframework.http.HttpEntity;
@@ -11,7 +10,6 @@
1110
import org.springframework.http.ResponseEntity;
1211
import org.springframework.web.bind.annotation.GetMapping;
1312
import org.springframework.web.bind.annotation.RequestMapping;
14-
import org.springframework.web.bind.annotation.RequestParam;
1513
import org.springframework.web.bind.annotation.RestController;
1614
import org.springframework.web.client.RestTemplate;
1715
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
@@ -35,15 +33,11 @@ public SpringfoxLoaderController() {
3533
}
3634

3735
@GetMapping("/api-docs")
38-
public ResponseEntity getApiDocs(HttpServletRequest request, @RequestParam(required = false) Boolean skipTags) throws IOException {
36+
public ResponseEntity getApiDocs(HttpServletRequest request) throws IOException {
3937
UriComponents uri = ServletUriComponentsBuilder.fromServletMapping(request).path("/v2/api-docs").build();
4038
ResponseEntity<String> response = restTemplate.exchange(uri.toString(), HttpMethod.GET, new HttpEntity<>(null), String.class);
4139

4240
String json = response.getBody();
43-
if (skipTags != null && skipTags) {
44-
json = JsonPath.parse(json).set("$.tags", new String[]{}).jsonString();
45-
}
46-
4741
return new ResponseEntity<>(json, headers, response.getStatusCode());
4842
}
4943
}

src/test/groovy/com/github/springfox/loader/controller/SpringfoxLoaderControllerSpec.groovy

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders
88
import org.springframework.web.client.RestTemplate
99
import spock.lang.Specification
1010

11-
import static org.hamcrest.Matchers.hasSize
1211
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
13-
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath
1412
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
1513

1614
class SpringfoxLoaderControllerSpec extends Specification {
@@ -32,14 +30,4 @@ class SpringfoxLoaderControllerSpec extends Specification {
3230
1 * restTemplate.exchange('http://localhost/v2/api-docs', HttpMethod.GET, _ as HttpEntity, String) >> ResponseEntity.ok('')
3331
response.andExpect(status().isOk())
3432
}
35-
36-
def "GET api-docs and skip tags"() {
37-
when:
38-
def response = mockMvc.perform(get('/springfox-loader/api-docs').param('skipTags', 'true'))
39-
40-
then:
41-
1 * restTemplate.exchange('http://localhost/v2/api-docs', HttpMethod.GET, _ as HttpEntity, String) >> ResponseEntity.ok('{ "tags": [ "test123", "test234" ] }')
42-
response.andExpect(status().isOk())
43-
.andExpect(jsonPath('$.tags', hasSize(0)))
44-
}
4533
}

0 commit comments

Comments
 (0)