Wie zu verwenden LocalDateTime RequestParam im Frühjahr? Ich bekomme "Failed to convert String to LocalDateTime"
Ich benutze Spring Boot und enthalten jackson-datatype-jsr310
mit Maven:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.7.3</version>
</dependency>
Wenn ich versuche, eine RequestParam mit Java 8 Date/Time Typ,
@GetMapping("/test")
public Page<User> get(
@RequestParam(value = "start", required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime start) {
//...
}
und testen Sie es mit dieser URL:
/test?start=2016-10-8T00:00
Bekomme ich die folgende Fehlermeldung:
{
"timestamp": 1477528408379,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.method.annotation.MethodArgumentTypeMismatchException",
"message": "Failed to convert value of type [java.lang.String] to required type [java.time.LocalDateTime]; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value '2016-10-8T00:00'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2016-10-8T00:00]",
"path": "/test"
}
InformationsquelleAutor Kery Hu | 2016-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
den
@RequestParam
ist genug, um schnappen Sie sich das Datum der Lieferung nach dem = - Zeichen, aber es kommt in der Methode alsString
. Das ist, warum es ist, werfen Sie das cast exception.wäre es besser, so etwas zu tun:
Seite beachten, wenn Sie mit Spring-Boot-web, möchten Sie vielleicht zu prüfen, wenn es
@GetMapping("/url")
oder@RequestMapping("/url")
, wenn Ihre Absicht ist, um diese Methode ausführen von HTTP-request.Sie könnte auch die Lösung für die Signatur-Methode:
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime start
Lösung funktionierte perfekt für mich
bitte posten Sie Ihren Kommentar als eine Antwort, wie es sein sollte das akzeptiert man imo
schon getan 😉
InformationsquelleAutor Bwvolleyball
Du alles richtig gemacht hast 🙂 . Hier ist ein Beispiel, das zeigt genau, was Sie tun. Nur Anmerkungen RequestParam mit
@DateTimeFormat
. Es gibt keine Notwendigkeit für spezielleGenericConversionService
oder manuelle Konvertierung in den controller. Diese blog-post schreibt darüber.Ich denke, Sie hatte ein Problem mit dem format. Auf meinem setup funktioniert alles gut.
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) public @interface DateTimeFormat {
.Ungeachtet mein Kommentar oben, bewegen Sie die annotation aus einer request-parameter (zwei von Ihnen, eigentlich:
startDate
undendDate
), um die request-Methode schien zu brechen, die Methode, das Verhalten zum schlechteren.Dies funktioniert gut für Datum Muster, die nicht mit timestamps, aber wenn Sie einen Zeitstempel in das Muster, es nicht zu konvertieren Sie die Zeichenfolge in ein Datum (oder eine andere anwendbare Art).
Ich war falsch, das funktioniert gut mit Zeitstempel, aber wenn Sie kopieren und einfügen das Beispiel, das in der JavaDoc für die org.springframework.format.Anmerkung.DateTimeFormat.ISO.DATE_TIME, es werde scheitern. Das Beispiel, das Sie geben sollten, haben X statt Z für Ihre Muster, wie Sie enthalten -05:00 im Gegensatz zu -0500.
InformationsquelleAutor d0x
Wie ich in dem Kommentar, Sie könnte auch die Lösung für die Signatur-Methode:
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime start
InformationsquelleAutor Anna
Fand ich Abhilfe hier.
Diese Konfiguration Klasse fügt Unterstützung für Datum/Datum-Uhrzeit in der ABFRAGE-STRING:
Es funktioniert auch, wenn Sie binden mehrere Anfrage-Parameter zu einer Klasse (
@DateTimeFormat
annotation hilflos in diesem Fall):InformationsquelleAutor Lu55
Ich lief in das gleiche problem und meine Lösung hier (ohne Anmerkungen)
Also in deinem Fall tun Sie dies:
dann registrieren Sie sich einfach Ihre bean:
Mit Anmerkungen
fügen Sie es zu Ihrem ConversionService:
und schließlich würden Sie dann @Autowire in Ihrem ConversionService:
Lesen Sie mehr über Konvertierungen mit Feder (und Formatierung) auf dieser Website. Seien Sie gewarnt, es hat eine Tonne von anzeigen, aber ich habe definitiv festgestellt, dass es eine nützliche Seite und eine gute Einführung in das Thema.
InformationsquelleAutor Naruto Sempai