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. p>
Le contrôleur est p> lorsque j'utilise curl (en utilisant le même format de date que j'utilise pour créer des enregistrements) P> 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 P>
blockQuote> Je reçois une réponse de p> {"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 "} P>
blockQuote> et dans le journal p> Emplacement du contrôleur est 1 Démarrer est Null End est NULL P>
demande et réponse est terminée p>
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 p>
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] P>
blockQuote> Le modèle est p> 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? P> ps. Ont utilisé des motifs différents juste pour voir si on a travaillé. P> p>
3 Réponses :
Je suggérerais plusieurs solutions de contournement. P>
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: P>
@jsonformat (forme = jsonformat.shape.string, motif = "AAAA-MM-DD'HHHH: mm: SS.SSSZ") P> LI>
transmettez-le sous forme de chaîne et analysez-le à l'aide de DateTimeformatter sur le côté serveur p> li> ol>
manquant est: Ils restent null. ;) p> 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. EM> P> Le format ISO semble être le format standard (pas sûr de MS) et ZonedDateTetime pourrait être plus convivial. P> p>
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);
}
J'ai évidemment mal compris l'entrée Stackoverflow que j'ai référencée. Merci beaucoup @nitika.
Je doute que le problème soit votre DateTimeformat, c'est plus probablement votre paramètre est null