2010-06-16 5 views
7

Я использую Джерси (jax-rs) для создания богатого приложения REST.JAX-RS JSON java.util.Date Unmarshall

Все отлично, но я не совсем понимаю, как настроить параметры JSON Marshalling/Unmarshalling для дат и чисел.

У меня есть класс User:

@XmlRootElement 
public class User { 
    private String username; 
    private String password; 
    private java.util.Date createdOn; 

    // ... getters and setters 
} 

Когда createdOn свойство сериализации, я получаю строку, как это: '2010-05-12T00: 00: 00 + 02: 00', но мне нужно использовать определенный шаблон даты, как для маршаллинга, так и для отмены дат.

Кто-нибудь знает, как это сделать?

ответ

2

Что вы получаете, это формат ISO 8601, который является стандартом. Джерси проанализирует его для вас на сервере. Для javascript здесь используется extension to js date.

+0

Thank-х к вашему ответу! Хорошо для расширения Javascript, однако я знаю, что могу контролировать маршалл, процесс unmarshall. Знаете ли вы, где продлить майку? Большое спасибо, Davide – Davide

+0

Ссылка умерла с тех пор. –

16

Вы могли бы написать XMLAdapter:

Ваш конкретный XMLAdapter будет выглядеть примерно так:

import java.util.Date; 
import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class JsonDateAdapter extends XmlAdapter<String, Date> { 

    @Override 
    public Date unmarshal(String v) throws Exception { 
     // TODO convert from your format 
    } 

    @Override 
    public String marshal(Date v) throws Exception { 
     // TODO convert to your format 
    } 

} 

Тогда на вашей собственности дату установить следующую аннотацию:

@XmlJavaTypeAdapter(JsonDateAdapter.class) 
public getDate() { 
    return date; 
} 
1

Если вы не хотите, чтобы играть с адаптерами или вам необходимо пользовательским сортировочным для различных объектов и хотите, чтобы избежать адаптеров ALLtogether, вы также можете играть с атрибутами и картиной боба:

private Date startDate; 

@XmlTransient 
public Date getStartDate() { 
    return startDate; 
} 
public void setStartDate(Date startDate) { 
    this.startDate = startDate; 
} 
@XmlElement public String getStrStartDate() { 
    if (startDate == null) return null; 
    return "the string"; // the date converted to the format of your choice with a DateFormatter"; 
} 
public void setStrStartDate(String strStartDate) throws Exception { 
    this.startDate = theDate; // the strStartDate converted to the a Date from the format of your choice with a DateFormatter; 
} 
+0

После нескольких дней разработки я использую как мощную js-библиотеку (http://www.datejs.com/) для преобразования данных с и на сервер в формате ISO-8601, а при необходимости I используйте свою работу. Потребность возникает, когда между клиентом и сервером существует другой часовой пояс. В некотором смысле дата автоматически рассчитывается с использованием разницы между местным временем и GMT. Большая проблема, когда вам нужна дата, транслируется до полуночи ... – Davide

+1

@Davide Я нашел библиотеку [joda-time] (http://joda-time.sourceforge.net/), полезную для синтаксического анализа дат в различных строковых форматах и для расчета последней полуночи в/до заданной отметки времени. –

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

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