Я анализирую сообщение REST как json, содержащее дату и время UTC.
В некоторых сообщениях дата и время не в формате UTC. Десериализатор запрограммирован на возврат к местному времени. Это нормально.
Но как записать исходную (всю строку json) строку, переданную в анализатор json для устранения неполадок?
Когда я, например, jp.getCurrentLocation (), я получаю только ссылку на поток
Вот код:
public class UtcDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
private static final Logger LOGGER = LoggerFactory.getLogger(UtcDateTimeDeserializer.class);
public UtcDateTimeDeserializer() {
super(LocalDateTime.class);
}
@Override
public LocalDateTime deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException {
String zonedatetimestring = jp.readValueAs(String.class);
try {
ZonedDateTime zonedDateTime = ZonedDateTime.parse(zonedatetimestring);
LocalDateTime localDateTime =
LocalDateTime.ofInstant(zonedDateTime.toInstant(), ZoneOffset.systemDefault());
return localDateTime;
} catch (DateTimeParseException e) {
LOGGER.warn("Here I like to log the entire json string, but get only a steam reference... location={}", jp.getCurrentLocation());
LocalDateTime localDateTime = LocalDateTime.parse(zonedatetimestring);
return localDateTime;
}
}