LocalDateTimeSerializers.java

package io.extact.rms.platform.jaxrs.converter;

import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import jakarta.json.bind.serializer.DeserializationContext;
import jakarta.json.bind.serializer.JsonbDeserializer;
import jakarta.json.bind.serializer.JsonbSerializer;
import jakarta.json.bind.serializer.SerializationContext;
import jakarta.json.stream.JsonGenerator;
import jakarta.json.stream.JsonParser;

public class LocalDateTimeSerializers {

    private DateTimeFormatter dateTimeFormatter;

    // ----------------------------------------------------- public methods

    public LocalDateTimeSerializers(DateTimeFormatter formatter) {
        this.dateTimeFormatter = formatter;
    }

    public JsonbSerializer<LocalDateTime> getSerializer() {
        return new LocalDateTimeSerializer();
    }

    public JsonbDeserializer<LocalDateTime> getDeserializer() {
        return new LocaDateTimeDeserializer();
    }


    // ----------------------------------------------------- inner classes

    public class LocalDateTimeSerializer implements JsonbSerializer<LocalDateTime> {
        @Override
        public void serialize(LocalDateTime obj, JsonGenerator generator, SerializationContext ctx) {
            generator.write(dateTimeFormatter.format(obj));
        }
    }

    public class LocaDateTimeDeserializer implements JsonbDeserializer<LocalDateTime> {
        @Override
        public LocalDateTime deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
            var value = parser.getString();
            return LocalDateTime.parse(value, dateTimeFormatter);
        }
    }
}