4

当我在 apache CXF 上使用 jax-rs 时,我一直在谷歌上搜索如何自定义日期格式。我查看了代码,似乎它只支持原语、枚举和一个特殊的 hack,它假设与 @FormParam 关联的类型有一个带有单个字符串参数的构造函数。如果我想使用 FormParam,这会迫使我使用 String 而不是 Date。这有点丑。有更好的方法吗?

@POST
@Path("/xxx")
public String addPackage(@FormParam("startDate") Date startDate)
    {
      ...
    } 

谢谢

4

4 回答 4

4

一种简单的方法是将参数作为 String 并在方法体中解析它以将其转换为 java.util.Date

另一种是创建一个类,其构造函数采用 String 类型的参数。执行与我在第一种方法中所说的相同的操作。

这是第二种方法的代码。

@Path("date-test")
public class DateTest{

    @GET
    @Path("/print-date")
    public void printDate(@FormParam("date") DateAdapter adapter){
        System.out.println(adapter.getDate());
    }

    public static class DateAdapter{
        private Date date;
        public DateAdapter(String date){
            try {
                this.date = new SimpleDateFormat("dd/MM/yyyy").parse(date);
            } catch (Exception e) {

            }
        }

        public Date getDate(){
            return this.date;
        }
    }
}

希望这可以帮助。

于 2011-05-11T08:08:01.040 回答
4

从 CXF 2.3.2 开始,注册 ParameterHandler 就可以了。也总是可以使用 RequestHandler 过滤器覆盖日期值(作为查询的一部分传递等),以使默认 Date(String) 正常工作

于 2011-01-18T16:46:15.593 回答
0

在阅读了 CXF 代码 (2.2.5) 之后,这是不可能的,并且使用 Date(String) 构造函数是硬编码的,所以无论 Date(String) 支持。

于 2010-09-09T18:01:59.637 回答
0

在 Apache-cxf 3.0 中,您可以使用 aParamConverterProvider将参数转换为Date.

以下代码是从我对这个问题的回答中复制而来的。

public class DateParameterConverterProvider implements ParamConverterProvider {

    @Override
    public <T> ParamConverter<T> getConverter(Class<T> type, Type type1, Annotation[] antns) {
        if (Date.class.equals(type)) {
            return (ParamConverter<T>) new DateParameterConverter();
        }
        return null;
    }

}

public class DateParameterConverter implements ParamConverter<Date> {

    public static final String format = "yyyy-MM-dd"; // set the format to whatever you need

    @Override
    public Date fromString(String string) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        try {
            return simpleDateFormat.parse(string);
        } catch (ParseException ex) {
            throw new WebApplicationException(ex);
        }
    }

    @Override
    public String toString(Date t) {
        return new SimpleDateFormat(format).format(t);
    }

}
于 2015-07-22T14:04:10.417 回答