JAX-RS JSON java.util.Date unmarshall
-
27-09-2019 - |
Question
J'utilise Jersey (JAX-RS), pour construire une REST applications riches.
Tout est super, mais je ne comprends pas vraiment comment configurer les options JSON sérialisation / désérialisation pour les dates et les chiffres.
J'ai une classe utilisateur:
@XmlRootElement
public class User {
private String username;
private String password;
private java.util.Date createdOn;
// ... getters and setters
}
Lorsque la propriété createdOn
est sérialisé, je reçois une chaîne comme ceci: « 2010-05-12T00: 00: 00 + 02: 00 », mais je dois utiliser un modèle de date spécifique, tant pour Marshall et les dates unmarshall.
Quelqu'un sait comment faire cela?
La solution
Ce que vous obtenez est une date au format ISO 8601, qui est une norme. Jersey analysera pour vous sur le serveur. Pour javascript est ici un extension à ce jour js pour analyser cela.
Autres conseils
Vous pouvez écrire un XMLAdapter:
Votre XMLAdapter particulier ressemblerait à quelque chose comme:
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
}
}
Ensuite, sur votre propriété de quantième l'annotation suivante:
@XmlJavaTypeAdapter(JsonDateAdapter.class)
public getDate() {
return date;
}
Si vous ne voulez pas avoir à jouer avec les adaptateurs ou vous aviez besoin pour les objets personnalisés marshalling différents et que vous voulez éviter les adaptateurs alltogether, vous pouvez aussi jouer avec les attributs et le modèle de haricot:
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;
}