Jackson sérialise un ZonedDateTime, à tort, au Printemps de Démarrage

J'ai une simple application avec Spring Boot et la Jetée. J'ai un contrôleur simple renvoyant un objet qui a une Java 8 ZonedDateTime:

public class Device {
  //...
  private ZonedDateTime lastUpdated;

  public Device(String id, ZonedDateTime lastUpdated, int course, double latitude, double longitude) {
    //...
    this.lastUpdated = lastUpdated;
    //...
  }

  public ZonedDateTime getLastUpdated() {
    return lastUpdated;
  }
}

Dans mon RestController je n'ai tout simplement:

@RequestMapping("/devices/")
public @ResponseBody List<Device> index() {
  List<Device> devices = new ArrayList<>();
  devices.add(new Device("321421521", ZonedDateTime.now(), 0, 39.89011333, 24.438176666));

  return devices;
}

Je m'attendais à la ZonedDateTime à être mis en forme selon le format ISO, mais au lieu de cela je suis tout JSON vidage de la classe comme ceci:

"lastUpdated":{"offset":{"totalSeconds":7200,"id":"+02:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"zone":{"id":"Europe/Berlin","rules":{"fixedOffset":false,"transitionRules":[{"month":"MARCH","timeDefinition":"UTC","standardOffset":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetBefore":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetAfter":{"totalSeconds":7200,"id":"+02:00", ...

J'ai juste un spring-boot-starter-web application, à l'aide de spring-boot-starter-jetty et à l'exclusion de spring-boot-starter-tomcat.

Pourquoi est-Jackson de se comporter comme le Printemps de Démarrage?

** Mise à JOUR **

Pour ceux à la recherche d'un guide étape par étape comment résoudre ce problème j'ai trouvé ce après avoir posé la question:
http://lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/

  • Si vraiment vous voulez garder les choses simples et ne pas le voyage jusqu'à la prochaine les gars qui lit votre code, il suffit de convertir votre Liste<Périphérique> une Liste<Map<String, Object>> vous-même et vient de mettre la correctement mis en forme de chaîne de caractères dans le champ que vous souhaitez qu'il soit. De cette façon, vous n'avez pas à vous familiariser avec l'évolution constante des travaux de magie de Jackson. Je sais que cela pourrait ne pas être une option si l'Appareil a de nombreux domaines, mais je voulais juste flotter l'option :).
  • Eh bien, si vous utilisez le Printemps de Démarrage de la moitié des choses sont magiques et peut vous trébucher si mal configuré. Le JSR310 configuration est devenu "la norme" standard que vous avez à faire pour Java 8 soutien en Temps depuis que j'ai posté cette question. Peut-être que dans l'avenir les Jackson bibliothèque de le faire par défaut.
InformationsquelleAutor jbx | 2016-08-22