1
votes

Spring Data Rest renvoyant les dates au format milliseconde

J'ai une entité avec des champs Dates (java.util.Date) définis de cette façon:

{"id":1,"tipoPlanId":320,"precio":155000.0,
"cantidad":6,"fechaInicio":1546300800000,"fechaFin":1551312000000}

J'ai RestController pour obtenir les entités, le problème est le format que j'obtiens est en millisecondes pour les dates:

@Temporal(TemporalType.TIMESTAMP)
private Date fechaInicio;

@Temporal(TemporalType.TIMESTAMP)
private Date fechaFin;

Je ne sais pas pourquoi ne renvoie pas le format de date par défaut pour le repos des données de printemps : 15: 16.000 + 0000 "

Merci pour votre aide.


0 commentaires

4 Réponses :


0
votes

Ma seule idée est de la convertir en une date lisible par un humain comme celle-ci:

    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
    String humanReadableDate = sdf.format(fechaFin);


0 commentaires

0
votes

Vous pouvez le modifier dans le getter de classe lorsque Spring récupère les champs et méthodes publics, ou le stocker comme TemporalType.DATE.


0 commentaires

2
votes

J'utilise Spring 2.x et pour moi Date est renvoyée dans le format approprié. Cependant, vous pouvez également l'appliquer en:

  • Ajout de spring.jackson.serialization.write-dates-as-timestamps = false dans votre fichier de propriétés
  • Ou en annotant votre variable membre avec @JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "aaaa-MM-jj HH: mm: ss")

Donc, dans votre cas, la classe sera comme:

@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date fechaInicio;

@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date fechaFin;


0 commentaires

1
votes

Tout d'abord, je recommande fortement d'utiliser java.time.LocalDateTime / java.time.LocalDate au lieu de java.util.Date (la gestion des fuseaux horaires est un cauchemar lors de l'utilisation de java.util.Date et vous pourriez finir par une mauvaise insertion date / heure dans votre base de données), le formatage de la date à l'aide de @JsonFormat peut résoudre le problème de format uniquement, mais vous pouvez faire face à des écarts de données lors du traitement de la valeur de date / horodatage.

Si vous utilisez SpringBoot, un formateur enregistré dans Spring Context est utilisé pour gérer LocalDate / LocalDateTime et vous pouvez utiliser ce type de données sans apporter de modification à votre configuration.

Maintenant, si vous n'utilisez pas Spring Boot, vous devrez peut-être enregistrer le formateur LocalDate / LocalDateTime dans votre configuration (voir ce post Comment enregistrer une liaison de données globale pour LocalDate dans spring mvc? , veuillez noter que vous devez enregistrer le type LocalDateTime pour horodatages )

Le traitement de la date / de l'horodatage n'est pas une chose triviale dans Rest / Spring, mais croyez-moi si vous implémentez LocalDate ou LocalDateTime, vous ne vous casserez pas la tête en essayant de découvrir ce qui ne va pas avec certaines dates / horodatages insérés avec des valeurs incorrectes dans la base de données.

Exemples de classes

DTO

@RestController
@RequestMapping("/chocolateCookies")
public class ChocolateCookieApi extends CookieApi<ChocolateCookie> {

    @GetMapping("/{cookieId}")
    public ResponseEntity<Cookie> findCookie(@PathVariable long cookieId) {
        final Cookie cookie = new Cookie();
        cookie.setId(cookieId);
        cookie.setExpirationDate(LocalDateTime.now().plusWeeks(4));
        return new ResponseEntity<>(cookie, HttpStatus.OK);
    }

    //Other cookie stuff

}

Contrôleur

public class Cookie {
    private long id;
    private LocalDateTime expirationDate;

    //Getters/setters and other stuff

}

Point final test

 entrez la description de l'image ici

Code disponible dans GitHub https://github.com/karl-codes/cookie-monster

Bon codage!


0 commentaires