FasterXML / FasterXML/jackson-modules-java8

OffsetTimeSerializer not writing seconds for time object like 15:30:00Z (where seconds is 00)

Aperta
#299 4 commenti 1 reazione 0 assegnatari Vedi su GitHub
pr-welcome test-needed
Lingua principale
Java
Stelle
425
Fork
124
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

When having a `OffsetTime` field with e.g. `15:00:00Z` and serializing this with Jackson it outputs:
`15:00Z` and thus the seconds are lost.

Note I have the time module registered via `JavaTimeModule()`.

Although one could argue that the seconds are not needed this gives some problems when validating outputted data against JSON schema.
when using the JSON schema format `time` then the seconds are expected, see https://json-schema.org/understanding-json-schema/reference/string#dates-and-times
without the seconds the JSON schema validator fails with: The value must be a valid time.
(note I'm using [Justify](https://github.com/leadpony/justify) for schema validation)

Looking at the source code, I see this is done on purpose
https://github.com/FasterXML/jackson-modules-java8/blob/master/datetime/src/main/java/tools/jackson/datatype/jsr310/ser/OffsetTimeSerializer.java#L92-L111

```
private final void _serializeAsArrayContents(OffsetTime value, JsonGenerator g,
SerializerProvider provider)
throws JacksonException
{
g.writeNumber(value.getHour());
g.writeNumber(value.getMinute());
final int secs = value.getSecond();
final int nanos = value.getNano();
if ((secs > 0) || (nanos > 0)) {
g.writeNumber(secs);
if (nanos > 0) {
if(useNanoseconds(provider)) {
g.writeNumber(nanos);
} else {
g.writeNumber(value.get(ChronoField.MILLI_OF_SECOND));
}
}
}
g.writeString(value.getOffset().toString());
}
```

Is it possible to override this behaviour?

Currently I think my only option is create a custom Serializer?

If not possible to override this behaviour would it be at least possible to change this `_serializeAsArrayContents` method from `private` to `protected` so one could simply extend this class and override this method?

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.