0
votes

@DateTimeFormat variable de repos donne null

J'ai vu Comment utiliser LocalDateTime RequestParam au printemps? Je reçois "Impossible de convertir la chaîne en localDateTime" mais j'ai toujours des problèmes.

Écrire une application de démarrage de printemps qui a une API de repos.

Le contrôleur est xxx

lorsque j'utilise curl (en utilisant le même format de date que j'utilise pour créer des enregistrements)

CURL -K -W "\ N" -H "Autorisation: porteur $ jeton" HTTPS: // MINT191: 8453 / API / V1 / V1 / Climats / LocalisationDates / 1/2019-12-17T11: 30: 00 / 2019-12-17T11: 55: 00

Je reçois une réponse de

{"Timetamp": "2019-12-19t11: 05: 21.707 + 0000", "Statut": 500, "Erreur": "interne Erreur de serveur "," Message ":" La valeur ne doit pas être null!; Exception imbriquée est java.lang.illegalargumentException: la valeur ne doit pas être NULL! "," PATH ":" / API / V1 / CLIGATES / EMPOSITIONDATES / 1/2019-12-17T11: 30: 00 / 2019-12-17T11: 55: 00 "}

et dans le journal

Emplacement du contrôleur est 1 Démarrer est Null End est NULL

demande et réponse est terminée

2019-12-19 11: 05: 21.668 Erreur 21113 --- [NIO-8453-EXEC-3] o.a.c.c.c.c.c.ca [. [/]. [Dispatcherservlet]: servlet.service () pour Servlet [Disternersservlet] dans le contexte avec chemin [] jeté une exception [La demande de traitement a échoué; Exception imbriquée est org.springframework.dao.invaliddataaccessapiusageException: la valeur doit ne pas être null!; Exception imbriquée est java.lang.illegalargumentException: La valeur ne doit pas être nulle!] Avec cause première

java.lang.illegalargumentException: la valeur ne doit pas être nulle! à org.springframework.util.assert.notnull (assert.java:198) ~ [Spring-core-5.2.2.Release.jar! /: 5.2.2.Release]

Le modèle est xxx

donc la chaîne de date 2019-12-17t11: 55: 00 n'est pas convertie en un objet localDattre. Qu'est-ce que je fais mal?

ps. Ont utilisé des motifs différents juste pour voir si on a travaillé.


1 commentaires

Je doute que le problème soit votre DateTimeformat, c'est plus probablement votre paramètre est null


3 Réponses :


0
votes

Je suggérerais plusieurs solutions de contournement.

  1. Ne laissez pas simplement passer la variable localDaTime, mais enveloppez-la dans une classe (avec d'autres paramètres) et dans votre classe d'emballage l'annotant comme suit:

    @jsonformat (forme = jsonformat.shape.string, motif = "AAAA-MM-DD'HHHH: mm: SS.SSSZ")

  2. transmettez-le sous forme de chaîne et analysez-le à l'aide de DateTimeformatter sur le côté serveur


0 commentaires

0
votes

manquant est: xxx

Ils restent null. ;)

Conseil: si cela ne fonctionne pas, commencez par un prototype simplifié; idéalement un test unitaire. Ensuite, on peut consécutivement ajouter / supprimer un élément, comme l'annotation de formateurs, à l'aide de localDaTetime et telle.

Le format ISO semble être le format standard (pas sûr de MS) et ZonedDateTetime pourrait être plus convivial.


0 commentaires

0
votes

Ajouter @Pathvariable à la fois à SDate et EDATE pour accéder à la valeur de l'URL comme ceci:

@RequestMapping(value = "/api/v1/climates/locationdates/{location}/{sdate}/{edate}", method = RequestMethod.GET)
    public ResponseEntity<Object> getClimate(@PathVariable("location") long location,
            @PathVariable("sdate") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime sdate,
            @PathVariable("edate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime edate) {

         System.out.println("CONTROLLER location is " + location + " start is " + sdate + " end is " + edate);           
         return new ResponseEntity<>(climateService.getClimatesByLocationAndDates(location, sdate, edate), HttpStatus.OK);
   }


1 commentaires

J'ai évidemment mal compris l'entrée Stackoverflow que j'ai référencée. Merci beaucoup @nitika.