当我在apache CXF上使用jax-rs时,我一直在谷歌上搜索如何自定义日期格式。我查看了代码,似乎它只支持原语,枚举和一个特殊的hack,假设与@FormParam相关的类型有一个带有单个字符串参数的构造函数。如果我想使用FormParam,这会强制我使用String而不是Date。它有点难看。有没有更好的方法呢?
@POST
@Path("/xxx")
public String addPackage(@FormParam("startDate") Date startDate)
{
...
}
由于
答案 0 :(得分:4)
从CXF 2.3.2开始注册ParameterHandler就可以了。也可以使用RequestHandler过滤器覆盖日期值(作为查询的一部分传递等),以使默认日期(字符串)起作用
答案 1 :(得分:4)
一个简单的apporach是将参数作为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;
}
}
}
希望这有帮助。
答案 2 :(得分:0)
在读取CXF代码(2.2.5)之后,它是不可能的,并且使用Date(String)构造函数进行硬编码,因此无论Date(String)支持什么。
答案 3 :(得分:0)
在Apache-cxf 3.0中,您可以使用ParamConverterProvider
将参数转换为Date
。
以下代码是从my answer to this question复制的。
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);
}
}