2010-06-16 21 views
7

Estoy usando Jersey (jax-rs) para crear una aplicación REST rica.JAX-RS JSON java.util.Date Unmarshall

Todo es genial, pero realmente no entiendo cómo configurar las opciones JSON Marshalling/Unmarshalling para fechas y números.

que tienen una clase de usuario:

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

    // ... getters and setters 
} 

Cuando la propiedad createdOn es serializado, me sale una cadena como esta: '2010-05-12T00: 00: 00 + 02: 00', pero necesito para usar un patrón de fecha específico, tanto para ordenar como para cancelar las fechas.

¿Alguien sabe cómo hacer eso?

Respuesta

2

Lo que obtienes es una fecha de formato ISO 8601, que es un estándar. Jersey lo analizará en el servidor. Para javascript aquí hay un extension to js date para analizar eso.

+0

Gracias de a tu respuesta! Ok para la extensión de Javascript, sin embargo, no sé cómo controlar el proceso marshall, unicarshall. ¿Sabes dónde extender jersey? Muchas gracias, Davide – Davide

+0

Link ha muerto desde entonces. –

16

Se podría escribir un XmlAdapter:

Su particular, XmlAdapter sería algo como:

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 
    } 

} 

A continuación, en su propiedad de fecha fija la siguiente anotación:

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

Si no quieren tener que jugar con los adaptadores o que sea necesario cálculo de referencias personalizado para diferentes objetos y desea evitar los adaptadores alltogether, también se puede jugar con los atributos y el patrón de frijol:

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

Después de algunos días de desarrollo, estoy usando ambos, una poderosa biblioteca js (http://www.datejs.com/), para convertir datos desde y hacia el servidor, en formato ISO-8601 y, cuando sea necesario, usa tu trabajo. La necesidad viene, cuando hay una zona horaria diferente entre cliente y servidor. De alguna manera, la fecha se calcula automáticamente, usando la diferencia entre hora local y GMT. Un gran problema cuando necesitas una fecha, enlazada a la medianoche ... – Davide

+1

@Davide Encontré la biblioteca [joda-time] (http://joda-time.sourceforge.net/) útil para analizar las fechas en varios formatos de cadenas y para calcular la última medianoche en/antes de una marca de tiempo determinada. –

Cuestiones relacionadas