Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java9+ OffsetDateTimeSerializer/OffsetDateTimeDeserializer miliseconds instead of nano config #161

Open
drej1 opened this issue Jan 30, 2020 · 6 comments
Assignees

Comments

@drej1
Copy link

drej1 commented Jan 30, 2020

Hi,
we have set SerializationFeature.WRITE_DATES_AS_TIMESTAMPS to false and in java8 it wrote time in milliseconds precision (java worked this way for a long time).
After migrating to java11 the precision is nanoseconds

  • (Java 8- - 2020-01-28T16:31:37.698+01:00)
  • (Java 9+ - 2020-01-28T16:31:37.698185+01:00)

This is fine, but unfortunately the services both northbound and southbound of our system can work with milliseconds (3 digits).
Would it be possible to create a SerializationFeature to enable java8 behavior meaning serializing only to milliseconds precision?
We use a spring boot autoconfiguration where we would like to set this globally for all of our microservices.

Thanks,
Ondrej

PS: Maybe until then, could you provide us instructions for the best way to setup this in Spring Boot 2.2.x?
Thanks

@cowtowncoder
Copy link
Member

This is probably difference in JDK, regarding either default serialization of the type, or handling of time format strings. As such I it is possible Jackson does not have much control over these aspects.

As to Spring Boot, that would be good question for Spring Boot user groups or StackOverflow; although maybe other Jackson users could help as well at:

https://groups.google.com/forum/#!forum/jackson-user

@kupci
Copy link
Member

kupci commented Jan 30, 2020

Speaking of StackOverflow, would GedMarc's idea work: #71 (comment) (which references setting the precision in the formatter: https://stackoverflow.com/questions/44373144/java-8-how-to-create-datetimeformatter-with-milli-micro-or-nano-seconds)

@cowtowncoder
Copy link
Member

@kupci Possibly? If anyone wants to do patch for Jackson 2.11 (along with test), would be happy to merge

@kupci
Copy link
Member

kupci commented Feb 19, 2020

I'll take a look. I've got Java 11 installed, which I think meets the requirements to reproduce the issue:

(Java 9+ - 2020-01-28T16:31:37.698185+01:00)

@kupci kupci added the 2.11 label Feb 19, 2020
@kupci kupci self-assigned this Feb 19, 2020
@cowtowncoder
Copy link
Member

Our Travis builds check both java 8 and java 11 fwtw (and once 14 becomes available, that; focusing on LTS versions)

@cowtowncoder cowtowncoder added 2.12 and removed 2.11 labels Sep 30, 2020
@plebcity
Copy link

plebcity commented Dec 24, 2021

This issue is present again with the upgrade from java 11 to java 17 as they introduced nanoseconds (9 decimals) to java instants. https://bugs.openjdk.java.net/browse/JDK-8242504

This means that an instant created on a linux machine has 9 decimals of milliseconds but an instant created on MacOS has 6 decimals. Instead of truncating everything manually we would love an option to configure how many decimals are accepted and parsed by the Objectmapper.

@cowtowncoder cowtowncoder removed the 2.12 label Dec 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants