package ru.semiot.commons.restapi;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
@Provider
public class ZoneDateTimeProvider implements ParamConverterProvider {
@Override
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType,
Annotation[] annotations) {
if (rawType.getName().equals(java.time.ZonedDateTime.class.getName())) {
return new ParamConverter<T>() {
@Override
public T fromString(String value) {
if (value == null || value.isEmpty()) {
return null;
} else {
java.time.ZonedDateTime dateTime = java.time.ZonedDateTime.parse(
value, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
return rawType.cast(dateTime);
}
}
@Override
public String toString(T value) {
if (value instanceof ZonedDateTime) {
return ((ZonedDateTime) value).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}
return null;
}
};
}
return null;
}
}