FasterXML / FasterXML/jackson-modules-java8
Allow Instant to be serialized as epochSecond without the fraction part
- 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