Skip to content

Commit 22eb95f

Browse files
Register ObjectMapper modules (#419)
Finding and registering modules can avoid exceptions like the following: ``` Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: org.openapitools.openapidiff.core.model.ChangedOpenApi["changedOperations"]->java.util.ArrayList[0]->org.openapitools.openapidiff.core.model.ChangedOperation["oldOperation"]->io.swagger.v3.oas.models.Operation["responses"]->io.swagger.v3.oas.models.responses.ApiResponses["default"]->io.swagger.v3.oas.models.responses.ApiResponse["content"]->io.swagger.v3.oas.models.media.Content["application/json"]->io.swagger.v3.oas.models.media.MediaType["schema"]->io.swagger.v3.oas.models.media.Schema["properties"]->java.util.LinkedHashMap["someDateTime"]->io.swagger.v3.oas.models.media.DateTimeSchema["example"]) at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35) ... at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3821) at org.openapitools.openapidiff.core.output.JsonRender.render(JsonRender.java:22) ```
1 parent 65d0acd commit 22eb95f

File tree

4 files changed

+60
-2
lines changed

4 files changed

+60
-2
lines changed

core/src/main/java/org/openapitools/openapidiff/core/output/JsonRender.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@
88
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
99

1010
public class JsonRender implements Render {
11-
private final ObjectMapper objectMapper =
12-
new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
11+
private final ObjectMapper objectMapper;
12+
13+
public JsonRender() {
14+
objectMapper = new ObjectMapper();
15+
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
16+
objectMapper.findAndRegisterModules();
17+
}
1318

1419
@Override
1520
public String render(ChangedOpenApi diff) {

core/src/test/java/org/openapitools/openapidiff/core/JsonRenderTest.java

+8
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,12 @@ public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
1414
OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
1515
assertThat(render.render(diff)).isNotBlank();
1616
}
17+
18+
@Test
19+
public void renderDoesNotFailForJsr310Types() {
20+
JsonRender render = new JsonRender();
21+
ChangedOpenApi diff =
22+
OpenApiCompare.fromLocations("jsr310_property_1.yaml", "jsr310_property_2.yaml");
23+
assertThat(render.render(diff)).isNotBlank();
24+
}
1725
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Title
4+
version: 1.0.0
5+
description: Description
6+
paths:
7+
/:
8+
get:
9+
summary: Simple GET
10+
operationId: simpleGet
11+
responses:
12+
default:
13+
description: Default response
14+
content:
15+
application/json:
16+
schema:
17+
properties:
18+
someDateTime:
19+
description: Date time
20+
example: 2021-11-03T13:50:47Z
21+
type: string
22+
format: date-time
23+
description: Simple GET
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
openapi: 3.0.1
2+
info:
3+
title: Title
4+
version: 1.0.0
5+
description: Description
6+
paths:
7+
/:
8+
get:
9+
summary: Simple GET
10+
operationId: simpleGet
11+
responses:
12+
default:
13+
description: Default response
14+
content:
15+
application/json:
16+
schema:
17+
properties:
18+
someDateTime:
19+
description: Date time
20+
example: 2021-11-03T13:50:47Z
21+
type: string
22+
description: Simple GET

0 commit comments

Comments
 (0)