ParamRmsConverterProvider.java
package io.extact.rms.platform.jaxrs.converter;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import jakarta.ws.rs.ext.ParamConverter;
import jakarta.ws.rs.ext.ParamConverterProvider;
import org.eclipse.microprofile.config.ConfigProvider;
// Provider Class
// register by @RegisterProvider or Application#getClasseses()
public class ParamRmsConverterProvider implements ParamConverterProvider {
private final String datePattern;
private final String dateTimePattern;
public ParamRmsConverterProvider() {
// ConfigがなぜかInjectで取得できないためProvierクラス経由で取得
this.datePattern = ConfigProvider.getConfig().getValue("json.format.date", String.class);
this.dateTimePattern = ConfigProvider.getConfig().getValue("json.format.dateTime", String.class);
}
@SuppressWarnings("unchecked")
@Override
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
if (rawType == LocalDate.class) {
return (ParamConverter<T>) new LocalDateConverter();
}
if (rawType == LocalDateTime.class) {
return (ParamConverter<T>) new LocalDateTimeConverter();
}
return null;
}
// ----------------------------------------------------- inner classes
public class LocalDateConverter implements ParamConverter<LocalDate> {
@Override
public LocalDate fromString(String value) {
if (value == null || value.length() == 0) {
return null;
}
return LocalDate.parse(value, DateTimeFormatter.ofPattern(datePattern));
}
@Override
public String toString(LocalDate value) {
return value == null ? "" : value.format(DateTimeFormatter.ofPattern(datePattern));
}
}
public class LocalDateTimeConverter implements ParamConverter<LocalDateTime> {
@Override
public LocalDateTime fromString(String value) {
if (value == null || value.length() == 0) {
return null;
}
return LocalDateTime.parse(value, DateTimeFormatter.ofPattern(dateTimePattern));
}
@Override
public String toString(LocalDateTime value) {
return value == null ? "" : value.format(DateTimeFormatter.ofPattern(dateTimePattern));
}
}
}