FasterXML / FasterXML/jackson-modules-java8

Allow Instant to be serialized as epochSecond without the fraction part

Open
#116 20 comments 4 reactions 0 assignees View on GitHub
date-time-config new-feature
Dominant language
Java
Stars
425
Forks
124
PR merge metrics
No merged PRs in 30d

Description

I have an `Instant` field that represents an epoch timestamp in seconds.

```
@JsonProperty("registered_at")
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
private Instant registeredAt;
```

the mapper is configured this way

```
.featuresToDisable(ADJUST_DATES_TO_CONTEXT_TIME_ZONE,
FAIL_ON_UNKNOWN_PROPERTIES,
WRITE_DATES_AS_TIMESTAMPS,
SORT_PROPERTIES_ALPHABETICALLY)
```

However when this gets serialized as

```
"registered_at" : 1420324047.000000000
```

By looking at the code there's no way to serialize this value as epoch seconds using the standard mechanism.

`InstantSerializerBase.serialize(T value, JsonGenerator generator, SerializerProvider provider)`

```
if (useTimestamp(provider)) {
if (useNanoseconds(provider)) {
generator.writeNumber(DecimalUtils.toBigDecimal(
getEpochSeconds.applyAsLong(value), getNanoseconds.applyAsInt(value)
));
return;
}
generator.writeNumber(getEpochMillis.applyAsLong(value));
return;
}
```

The only option is to use :

```
@JsonGetter("registered_at")
public long getRegisteredAtEpoch() {
return registeredAt.getEpochSecond();
}
```

It could be nice if there could be way to tell jackson to avoid serializing the fraction part.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with InstantSerializerBase.serialize(T value, JsonGenerator generator, SerializerProvider provider) and the shown timestamp and nanosecond handling. Trace how @JsonFormat(shape = JsonFormat.Shape.NUMBER) and the mapper features select this path, then determine the intended standard configuration for omitting the fractional part. Done means an Instant epoch timestamp serializes as an integral epoch-second number without requiring a custom getter.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.