是否有人为Jersey2创建了一个CustomConvertor类进行转换 ISO 8601可以追溯到日期/大纪元时间吗?
我在ISO_8601_FORMAT =“yyyy-MM-dd'T'HH:mm:ss.SSSZ”中将日期作为查询参数传递;我需要转换为纪元秒。我有所有必要的东西,我迷失了它。 一旦我们看到DateEpochMarker界面,我希望自定义转换器启动。我用的是球衣2
我失踪的步骤是什么?
有人可以帮帮我吗?
我有一个客户转换器,标记接口和资源方法。
public class DateToEpochConvertor implements ParamConverter<Long> {
private static final String ISO_8601_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
@Override
public Long fromString(String value) {
DateFormat df1 = new SimpleDateFormat(ISO_8601_FORMAT);
Date date = new Date();
try {
date = df1.parse(value);
} catch (ParseException e) {
throw new WebApplicationException("The Date "+value+" is not in the ISO 8601 Format ");
}
return date.getTime();
}
@Override
public String toString(Long value) {
DateFormat df1 = new SimpleDateFormat(ISO_8601_FORMAT);
Date dt = new Date();
dt.setTime(value);
return df1.format(dt);
}
}
标记界面
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface DateEpochMarker {}
资源方法
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/epochtime")
public Long getEpochTime(@DateEpochMarker @QueryParam("startTime") Long startEpochTime){
return startEpochTime;
}
答案 0 :(得分:2)
回答我自己的问题我感到愚蠢 不知何故,我无法完成上述工作,最终我使用的是定制的Jodatime Convertor 粘贴代码,以便任何绊倒同一查询的人都可以得到答案
@Provider
public class DateTimeParamConverterProvider implements ParamConverterProvider {
private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(DateTimeParamConverterProvider.class);
@Override
public <T> ParamConverter<T> getConverter(Class<T> type, Type genericType, Annotation[] annotations) {
if (type.equals(DateTime.class)) {
return (ParamConverter<T>) new DateTimeParamConverter();
} else {
return null;
}
}
private static class DateTimeParamConverter implements ParamConverter<DateTime> {
@Override
public DateTime fromString(String value) {
LOGGER.debug("The ISO Date that is provided is {}", value);
try {
return ISODateTimeFormat.dateTimeNoMillis().parseDateTime(value);
} catch (IllegalArgumentException e) {
return ISODateTimeFormat.dateTime().parseDateTime(value);
}
}
@Override
public String toString(DateTime value) {
return value.toString();
}
}
}