diff --git a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts index 15c24bebed..35407b4cb7 100644 --- a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts @@ -10,7 +10,10 @@ import { type TypeKind, UnionType, } from "../../Type/index.js"; -import { removeNullFromUnion } from "../../Type/TypeUtils.js"; +import { + nullableFromUnion, + removeNullFromUnion, +} from "../../Type/TypeUtils.js"; import { JavaRenderer } from "./JavaRenderer.js"; import { stringEscape } from "./utils.js"; @@ -58,7 +61,12 @@ export class JacksonRenderer extends JavaRenderer { `@JsonProperty("${stringEscape(jsonName)}")`, ]; - switch (p.type.kind) { + const propertyType = + p.type instanceof UnionType + ? (nullableFromUnion(p.type) ?? p.type) + : p.type; + + switch (propertyType.kind) { case "date-time": this._dateTimeProvider.dateTimeJacksonAnnotations.forEach( (annotation) => { diff --git a/test/inputs/schema/optional-date-time.1.fail.date-time.json b/test/inputs/schema/optional-date-time.1.fail.date-time.json new file mode 100644 index 0000000000..f7c14ea5ff --- /dev/null +++ b/test/inputs/schema/optional-date-time.1.fail.date-time.json @@ -0,0 +1,8 @@ +{ + "required-date": "2024-01-02", + "required-time": "12:34:56Z", + "required-date-time": "not a valid date-time at all", + "optional-date": "2024-01-02", + "optional-time": "12:34:56Z", + "optional-date-time": "2024-01-02T12:34:56Z" +} diff --git a/test/inputs/schema/optional-date-time.1.json b/test/inputs/schema/optional-date-time.1.json new file mode 100644 index 0000000000..ba76d40946 --- /dev/null +++ b/test/inputs/schema/optional-date-time.1.json @@ -0,0 +1,8 @@ +{ + "required-date": "2024-01-02", + "required-time": "12:34:56Z", + "required-date-time": "2024-01-02T12:34:56Z", + "optional-date": "2024-01-02", + "optional-time": "12:34:56Z", + "optional-date-time": "2024-01-02T12:34:56Z" +} diff --git a/test/inputs/schema/optional-date-time.schema b/test/inputs/schema/optional-date-time.schema new file mode 100644 index 0000000000..485d7f1a02 --- /dev/null +++ b/test/inputs/schema/optional-date-time.schema @@ -0,0 +1,35 @@ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "required-date": { + "type": "string", + "format": "date" + }, + "required-time": { + "type": "string", + "format": "time" + }, + "required-date-time": { + "type": "string", + "format": "date-time" + }, + "optional-date": { + "type": "string", + "format": "date" + }, + "optional-time": { + "type": "string", + "format": "time" + }, + "optional-date-time": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "required-date", + "required-time", + "required-date-time" + ] +}