[java] Support 'time-local' format#23555
[java] Support 'time-local' format#23555Allsimon wants to merge 1 commit intoOpenAPITools:masterfrom
Conversation
There was a problem hiding this comment.
3 issues found across 7 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="samples/openapi3/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/model/Pet.java">
<violation number="1" location="samples/openapi3/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/model/Pet.java:44">
P2: New `LocalTime` model field is generated without Spring `@DateTimeFormat`, unlike other temporal fields, creating a Spring formatting/binding parity gap for `time-local`.</violation>
</file>
<file name="samples/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/model/Pet.java">
<violation number="1" location="samples/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/model/Pet.java:44">
P2: New `LocalTime` model field is missing `@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)`, causing inconsistent and potentially non-ISO Spring binding versus other temporal fields.</violation>
</file>
<file name="modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java">
<violation number="1" location="modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java:1417">
P2: `time-local` defaults are skipped for `java8-localdatetime` because default generation checks `"java8".equals(getDateLibrary())` while type mapping uses `dateLibrary.startsWith("java8")`.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) | ||
| private LocalDate dateOfBirth = LocalDate.parse("2021-01-01"); | ||
|
|
||
| private LocalTime feedingTime = LocalTime.parse("10:15:30"); |
There was a problem hiding this comment.
P2: New LocalTime model field is generated without Spring @DateTimeFormat, unlike other temporal fields, creating a Spring formatting/binding parity gap for time-local.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At samples/openapi3/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/model/Pet.java, line 44:
<comment>New `LocalTime` model field is generated without Spring `@DateTimeFormat`, unlike other temporal fields, creating a Spring formatting/binding parity gap for `time-local`.</comment>
<file context>
@@ -40,6 +41,8 @@ public class Pet {
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private LocalDate dateOfBirth = LocalDate.parse("2021-01-01");
+ private LocalTime feedingTime = LocalTime.parse("10:15:30");
+
public Pet() {
</file context>
| private LocalTime feedingTime = LocalTime.parse("10:15:30"); | |
| @DateTimeFormat(iso = DateTimeFormat.ISO.TIME) | |
| private LocalTime feedingTime = LocalTime.parse("10:15:30"); |
There was a problem hiding this comment.
@DateTimeFormat is not needed since Spring Boot 3
Do I need to add it ? I'm not sure any Spring Boot 2 users will want to use a recent generator anyway... see #23269
There was a problem hiding this comment.
I'm also open to create another PR that drop this annotation
| return null; | ||
| } else if (ModelUtils.isTimeLocalSchema(schema)) { | ||
| if (schema.getDefault() != null) { | ||
| if ("java8".equals(getDateLibrary())) { |
There was a problem hiding this comment.
P2: time-local defaults are skipped for java8-localdatetime because default generation checks "java8".equals(getDateLibrary()) while type mapping uses dateLibrary.startsWith("java8").
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java, line 1417:
<comment>`time-local` defaults are skipped for `java8-localdatetime` because default generation checks `"java8".equals(getDateLibrary())` while type mapping uses `dateLibrary.startsWith("java8")`.</comment>
<file context>
@@ -1411,6 +1412,13 @@ public String toDefaultValue(CodegenProperty cp, Schema schema) {
return null;
+ } else if (ModelUtils.isTimeLocalSchema(schema)) {
+ if (schema.getDefault() != null) {
+ if ("java8".equals(getDateLibrary())) {
+ return String.format(Locale.ROOT, "LocalTime.parse(\"%s\")", schema.getDefault());
+ }
</file context>
See https://spec.openapis.org/registry/format/time-local.html
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)Summary by cubic
Adds support for the OpenAPI
time-localformat in Java generators. Models now usejava.time.LocalTimewith correct default handling when using thejava8date library.time-localtoLocalTimeand add the import when using thejava8date library.LocalTime.parse(...); keep string defaults for non-java8.ModelUtils.isTimeLocalSchemaand handle nested property defaults.feedingTimeproperty).Written for commit 97fe053. Summary will update on new commits.