2010-05-14 5 views
4

Я искал Google, чтобы выяснить, как я могу настроить формат даты, когда я использую jax-rs на apache CXF. Я посмотрел на коды, и кажется, что он поддерживает только примитивы, перечисление и специальный хак, предполагающий, что тип, связанный с @FormParam, имеет конструктор с одним строковым параметром. Это заставляет меня использовать String вместо Date, если я хочу использовать FormParam. это отвратительно. Есть ли лучший способ сделать это?Пользовательский формат даты с jax-rs в apache cxf?

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

Благодаря

ответ

0

После считывания кодов CxF (2.2.5), это не представляется возможным, и он жёстко использовать конструктор Date (String), поэтому все даты поддержки (String).

4

Начиная с CXF 2.3.2 регистрация ParameterHandler сделает это. Также всегда можно переопределить значение даты (переданное как часть запроса и т. Д.) С использованием фильтров RequestHandler по умолчанию Date (String) для работы

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; 
     } 
    } 
} 

Надеюсь, это поможет.

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); 
    } 

}