#spring #datetime #serialization #java-8
#spring #datetime #сериализация #java-8
Вопрос:
У меня есть группа микросервисов spring, и большинство ответов содержат timestamp
поле
@NotNull
public OffsetDateTime timestamp = OffsetDateTime.now(ZoneOffset.UTC);
этот атрибут сериализуется как
"timestamp": {
"offset": {
"totalSeconds": 0,
"id": "Z",
"rules": {
"transitionRules": [],
"transitions": [],
"fixedOffset": true
}
},
"nano": 998000000,
"year": 2019,
"dayOfWeek": "TUESDAY",
"hour": 12,
"month": "MARCH",
"dayOfMonth": 26,
"dayOfYear": 85,
"minute": 20,
"monthValue": 3,
"second": 33
},
Есть ли какой-либо способ настроить Spring для сериализации его как обычного объекта timeStamp
2015-10-20T11:00:00-8:30
Ответ №1:
Вы можете реализовать сериализатор, подобный:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class OffsetDateTimeSerializer extends StdSerializer<OffsetDateTime> {
public OffsetDateTimeSerializer() {
super(OffsetDateTime.class);
}
@Override
public void serialize(final OffsetDateTime dateTime, final JsonGenerator generator,
final SerializerProvider provider) throws IOException {
generator.writeString(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
}
}
и аннотируйте свои поля с помощью:
@JsonSerialize(using = OffsetDateTimeSerializer.class)