diff --git a/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/module/SimpleTypeModule.java b/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/module/SimpleTypeModule.java index 4c590447..b5ab9ecd 100644 --- a/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/module/SimpleTypeModule.java +++ b/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/module/SimpleTypeModule.java @@ -84,9 +84,15 @@ public static SimpleTypeModule forPrimitiveTypes() { public static SimpleTypeModule forPrimitiveAndAdditionalTypes() { SimpleTypeModule module = SimpleTypeModule.forPrimitiveTypes(); + /* + * LocalDateTime does not fit the definition of "date-time" (a timestamp with time zone) + * as per RFC3339: https://datatracker.ietf.org/doc/html/rfc3339#section-5.6 + * See also: https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.7.3.1 + */ + module.withStringType(java.time.LocalDateTime.class); + module.withStandardStringType(java.time.LocalDate.class, "date"); - Stream.of(java.time.LocalDateTime.class, java.time.ZonedDateTime.class, - java.time.OffsetDateTime.class, java.time.Instant.class, + Stream.of(java.time.ZonedDateTime.class, java.time.OffsetDateTime.class, java.time.Instant.class, java.util.Date.class, java.util.Calendar.class) .forEach(javaType -> module.withStandardStringType(javaType, "date-time")); Stream.of(java.time.LocalTime.class, java.time.OffsetTime.class) diff --git a/jsonschema-generator/src/test/java/com/github/victools/jsonschema/generator/SchemaGeneratorSimpleTypesTest.java b/jsonschema-generator/src/test/java/com/github/victools/jsonschema/generator/SchemaGeneratorSimpleTypesTest.java index 17149f61..2b2b5d0a 100644 --- a/jsonschema-generator/src/test/java/com/github/victools/jsonschema/generator/SchemaGeneratorSimpleTypesTest.java +++ b/jsonschema-generator/src/test/java/com/github/victools/jsonschema/generator/SchemaGeneratorSimpleTypesTest.java @@ -54,7 +54,7 @@ static Stream getSimpleTypeCombinations() { Arguments.of(Float.class, SchemaKeyword.TAG_TYPE_NUMBER, "float", null), Arguments.of(float.class, SchemaKeyword.TAG_TYPE_NUMBER, "float", null), Arguments.of(java.time.LocalDate.class, SchemaKeyword.TAG_TYPE_STRING, "date", "date"), - Arguments.of(java.time.LocalDateTime.class, SchemaKeyword.TAG_TYPE_STRING, "date-time", "date-time"), + Arguments.of(java.time.LocalDateTime.class, SchemaKeyword.TAG_TYPE_STRING, null, null), Arguments.of(java.time.LocalTime.class, SchemaKeyword.TAG_TYPE_STRING, "time", "time"), Arguments.of(java.time.ZonedDateTime.class, SchemaKeyword.TAG_TYPE_STRING, "date-time", "date-time"), Arguments.of(java.time.OffsetDateTime.class, SchemaKeyword.TAG_TYPE_STRING, "date-time", "date-time"),