Jersey2自定义日期转换器

时间:2014-08-26 13:48:18

标签: date jersey-2.0 epoch iso8601

是否有人为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;
}

1 个答案:

答案 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();
        }

    }
}