Sérialiser Date dans un JSON service web REST que la norme ISO-8601 chaîne
J'ai un JAX-RS application à l'aide de JBoss as 7.1, et je POST/GET JSON et XML des objets qui comprennent les Dates (java.util.Date):
@XmlRootElement
@XmlAccessorType(XmlAccessField.FIELD)
public class MyObject implements Serializable
{
@XmlSchemaType(name = "dateTime")
private Date date;
...
}
Lorsque j'utilise @Produire("application/xml") sur la méthode get, les objets sont sérialisé en XML et les dates sont convertis en ISO-8601 des chaînes de caractères (par exemple "2012-12-10T14:50:12.123+02:00").
Cependant, si j'utilise @Produire("application/json") sur la méthode get, les dates des objets JSON sont les dates (par exemple, "1355147452530") au lieu de la norme ISO-8601 chaînes.
Comment puis-je faire pour configurer le JAX-RS de mise en œuvre (RESTEasy) pour sérialiser les dates au format JSON que la norme ISO-8601 cordes à la place des horodateurs ?
Merci pour vos réponses.
Note: j'ai également essayé d'utiliser un JAX-RS fournisseur à faire de la sérialisation JSON pour les Dates
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomJsonDateProvider implements MessageBodyWriter<Date>
{
...
}
Ce fournisseur semble être enregistrés par RESTeasy sur JBoss démarrage:
[org.jboss.jaxrs] Adding JAX-RS provider classes: package.CustomJsonDateProvider
...
[org.jboss.resteasy.cdi.CdiInjectorFactory] No CDI beans found for class package.CustomJsonDateProvider. Using default ConstructorInjector.
mais il n'est jamais utilisé !
Vous devez vous connecter pour publier un commentaire.
Je suppose que votre parser json est Jackson, essayez:
(depuis Jackson 2.0)
@JsonSerialize(as = Date.class)
avant@JsonFormat
annotation.La valeur par défaut de JBoss analyseur est en Débarrasser, mais je n'étais pas en mesure de changer le format de la date. Donc je suis passé à Jackson et ajout de la classe de mon projet pour le configurer:
JacksonConfig
). J'ai ajouté Maven dependency<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.7</version></dependency>
et utilisé un format de date personnaliséobjectMapper.setDateFormat(new SimpleDateFormat("dd.MM.yyyy"))
à la place de celui par défaut définie avecobjectMapper.configure()
Désolé les gens pour crier haut et fort - j'ai trouvé les réponses ici
http://wiki.fasterxml.com/JacksonFAQDateHandling,
ici
http://wiki.fasterxml.com/JacksonFAQ#Serializing_Dates,
ici
http://wiki.fasterxml.com/JacksonHowToCustomSerializers
ici
http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/util/StdDateFormat.html
À l'aide de @JsonSerialize(à l'aide d'= ... ) de manière à:
Déclarer la même
Serializer
utilisé par Soap/XML: