2015-04-21 3 views
1

Как отправить значение даты объекту Calendar в Webservice Request.Значение Parsing Date как JSON в RESTful Webservice Request

@Produces("application/json") 
@Path("Service") 
public class ServiceImpl { 

    @Context 
    HttpServletRequest httpServletRequest; 
    @Context 
    HttpServletResponse httpServletResponse; 

    @POST 
    @Path("getDetails") 
    @Consumes("application/json") 
    @Produces("application/json") 
    public String getDetails (ServiceRequest request) 
    { 
    if(null!=request) 
    return "Successfully Parsed given Date"; 
    } 
} 

public class ServiceRequest { 

    private XMLGregorianCalendar requestDate; 

    void setDate(XMLGregorianCalendar date){ 
    this.requestDate = date; 
    } 
    XMLGregorianCalendar getDate() 
    { 
    return requestDate; 
    } 
} 

Запрос URL: http://localhost:7001/WebProject/Service/getDetails

RequestParams:

{ 
"requestDate" : "2015-04-20T05:30:00.000Z" 
} 

И не разбирая значение в качестве даты. Как я могу передать значение для объекта Calendar.

Я использую банку genson для сериализации запроса. И сообщение об ошибке, как

Caused by: com.owlike.genson.JsonBindingException: Could not parse date 2015-04-20T05:11:00.000Z 
    at com.owlike.genson.convert.DefaultConverters$DateConverter.deserialize(DefaultConverters.java:1003) 
    at com.owlike.genson.convert.DefaultConverters$CalendarConverter.deserialize(DefaultConverters.java:1226) 
    at com.owlike.genson.convert.DefaultConverters$CalendarConverter.deserialize(DefaultConverters.java:1209) 
    at com.owlike.genson.convert.BeanViewConverter.deserialize(BeanViewConverter.java:102) 
    at com.owlike.genson.convert.NullConverter$NullConverterWrapper.deserialize(NullConverter.java:56) 
    at com.owlike.genson.reflect.PropertyMutator.deserialize(PropertyMutator.java:30) 
    ... 48 more 
Caused by: java.text.ParseException: Unparseable date: "2015-04-20T05:11:00.000Z" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at com.owlike.genson.convert.DefaultConverters$DateConverter.read(DefaultConverters.java:1009) 
    at com.owlike.genson.convert.DefaultConverters$DateConverter.deserialize(DefaultConverters.java:1001) 
    ... 53 more 
+1

Эти два потока могут помочь: http://stackoverflow.com/a/26452897/4797507 http://stackoverflow.com/questions/13616034/how-do-i-configure- –

+1

Спасибо @Bob. Это работало для меня, когда я пишу класс поставщика, как он упоминается в документах. – Arun

+0

Добавление к этому у меня есть некоторые проблемы при получении ответа от службы. Скажем, моя база данных находится в другом месте и имеет другое местоположение. Когда я отлаживаю свой код, я мог бы найти дату и время, которые идеально подобраны, но когда поставщик genson приходит на место, он преобразуется в простой формат даты моего текущего времени, установленного системой. Это означает, что он преобразуется в системное время, а не с опорным значением – Arun

ответ

1

Если вы используете Genson 1.2 и старше, чем да два ответа указывали в комментариях должны работать для вас. Начиная с Genson 1.3, была небольшая рефакторинг вокруг настройки расширения JAX-RS, поэтому теперь это должно быть проще сделать. Пример использования Джерси:

Genson genson = new GensonBuilder() 
    .useDateFormat(yourDateFormat) 
    .create(); 

new ResourceConfig().register(new GensonJaxRSFeature().use(genson)); 

Но старый способ зарегистрировать пользовательский экземпляр должен по-прежнему продолжают работать с 1.3 и выше.

Вот соответствующие документы о jax-rs и configuration.

+0

Да, Eugen, он отлично работал с датой в сериализации и де-сериализации. Но когда этот класс провайдера вызывается, он преобразуется в системные данные, хотя у вас другое значение в объекте – Arun

+0

О, это XmlGregorianCalendar, этот формат даты еще не настраивается, но вы можете посмотреть [исходный код] (https://github.com/owlike/genson/blob/master/genson/src/main/java/com/owlike/genson/ext/jaxb/JAXBBundle.java#L113), чтобы увидеть, как он реализован и опробовать с вашим собственным конвертером или использовать базовую дату/календарь, для которых фактически используются пользовательские форматы дат. – eugen

+0

@eugen Где я должен использовать этот код? – Weedoze

 Смежные вопросы

  • Нет связанных вопросов^_^