Skip to content

Commit 4811981

Browse files
committed
Changes report: Null vendor extensions are excluded from Json/Yaml. Fixes springdoc#1525
1 parent ef23a57 commit 4811981

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/mixins/SortedOpenAPIMixin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
import com.fasterxml.jackson.annotation.JsonAnyGetter;
2828
import com.fasterxml.jackson.annotation.JsonAnySetter;
29+
import com.fasterxml.jackson.annotation.JsonInclude;
30+
import com.fasterxml.jackson.annotation.JsonInclude.Include;
2931
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3032
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
3133
import io.swagger.v3.core.jackson.PathsSerializer;
@@ -38,6 +40,7 @@
3840
public interface SortedOpenAPIMixin {
3941

4042
@JsonAnyGetter
43+
@JsonInclude(value = Include.ALWAYS)
4144
@JsonPropertyOrder(alphabetic = true)
4245
Map<String, Object> getExtensions();
4346

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/OpenAPIService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.util.stream.Stream;
4242

4343
import com.fasterxml.jackson.core.JsonProcessingException;
44+
import com.fasterxml.jackson.databind.ObjectMapper;
4445
import io.swagger.v3.core.jackson.TypeNameResolver;
4546
import io.swagger.v3.core.util.AnnotationsUtils;
4647
import io.swagger.v3.core.util.Json;
@@ -241,8 +242,8 @@ public void build(Locale locale) {
241242
}
242243
else {
243244
try {
244-
this.calculatedOpenAPI = Json.mapper()
245-
.readValue(Json.mapper().writeValueAsString(openAPI), OpenAPI.class);
245+
ObjectMapper objectMapper = new ObjectMapper();
246+
this.calculatedOpenAPI = objectMapper.readValue(objectMapper.writeValueAsString(openAPI), OpenAPI.class );
246247
}
247248
catch (JsonProcessingException e) {
248249
LOGGER.warn("Json Processing Exception occurred: {}", e.getMessage());

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/app138/SpringDocApp138Test.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,18 @@
2222
*/
2323
package test.org.springdoc.api.app138;
2424

25+
import java.util.HashMap;
26+
import java.util.LinkedHashMap;
27+
import java.util.Map;
28+
29+
import io.swagger.v3.oas.models.OpenAPI;
2530
import org.junit.jupiter.api.Assertions;
2631
import org.junit.jupiter.api.Test;
2732
import org.springdoc.core.utils.Constants;
2833
import test.org.springdoc.api.AbstractSpringDocTest;
2934

3035
import org.springframework.boot.autoconfigure.SpringBootApplication;
36+
import org.springframework.context.annotation.Bean;
3137
import org.springframework.test.context.TestPropertySource;
3238
import org.springframework.test.web.servlet.MvcResult;
3339
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@@ -44,8 +50,24 @@
4450
public class SpringDocApp138Test extends AbstractSpringDocTest {
4551

4652
@SpringBootApplication
47-
static class SpringDocTestApp {}
53+
static class SpringDocTestApp {
54+
@Bean
55+
public OpenAPI api() {
56+
return new OpenAPI()
57+
.extensions(apiExtensions());
58+
}
59+
}
60+
61+
private static Map<String, Object> apiExtensions() {
62+
Map extensions = new HashMap<String, Object>();
4863

64+
Map linkedMap = new LinkedHashMap<String, String>();
65+
linkedMap.put("property1", "value1");
66+
linkedMap.put("property2", null);
67+
68+
extensions.put("x-my-vendor-extensions", linkedMap);
69+
return extensions;
70+
}
4971
@Test
5072
public void testApp() throws Exception {
5173
MvcResult mockMvcResult = mockMvc.perform(MockMvcRequestBuilders.get(Constants.DEFAULT_API_DOCS_URL)).andExpect(status().isOk())
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://localhost","description":"Generated server url"}],"paths":{"/testA":{"get":{"tags":["hello-controller"],"operationId":"testA","parameters":[{"name":"hello","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/testB":{"get":{"tags":["hello-controller"],"operationId":"testB","parameters":[{"name":"hello","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}}},"components":{}}
1+
{"openapi":"3.0.1","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"http://localhost","description":"Generated server url"}],"paths":{"/testA":{"get":{"operationId":"testA","parameters":[{"in":"query","name":"hello","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}},"tags":["hello-controller"]}},"/testB":{"get":{"operationId":"testB","parameters":[{"in":"query","name":"hello","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}},"tags":["hello-controller"]}}},"components":{},"x-my-vendor-extensions":{"property1":"value1","property2":null}}

0 commit comments

Comments
 (0)