2017-05-25 4 views
1

Mein Controller sieht wie folgt aus:Datum als Anforderungsparameter im Frühjahr REST

@RequestMapping(value = "/process_date", method = RequestMethod.GET) 
    public ResponseEntity processDate 
     (@RequestParam(value = "time", required = false) 
     @DateTimeFormat(pattern="yyyy-MM-dd'T'HH:mm:ssXXX") Date date){ 
// process the date 
} 

Die POSTMAN Abfrage:

http://localhost:8080/process_date?date=2014-05-09T00:48:16-04:00 

Es gibt mir IllegalArgumentException. Die vollständige Ausnahme ist:

{ 
    "timestamp": 1495736131978, 
    "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.util.Date'; 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.util.Date] for value '2013-05-10T07:48:16-04:00'; nested exception is java.lang.IllegalArgumentException: Illegal pattern component: XXX", 
    "path": "/airspaces" 
} 

, nun seltsam, wenn ich laufen:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); 
try { 
    System.out.println(df.parse("2013-05-10T07:48:16-04:00")); 
} catch (ParseException e) { 
    System.out.println("PARSE EXCEPTION!!!"); 
} 

es ohne Ausnahme funktioniert. Gleiches Datumsformat, gleiches Datum.

Eine Abhilfe wäre, das Datum als Zeichenfolge zu erhalten und dann die Konvertierungen über die Parser-Methode durchzuführen.

Aber ich bin besorgt darüber, was hinter der Szene hier vorgeht.

+1

Es ist wahrscheinlich, weil Konverter und Formatierer 2 verschiedene Dinge sind. Haben Sie diesen Thread bereits überprüft: http://forum.spring.io/forum/spring-projects/web/86986-datetimeformat-for-pathvariable-not-converting? – cristianorbs

Antwort

0

Versuchen Sie Z anstelle von XXX in Ihrem Muster zu verwenden. Es sollte funktionieren.

+0

Es funktioniert, aber ich kann die Zeitzone nicht senden. –

+0

Es wird erlaubt, wenn Sie Semikolon in der Zeitzone entfernen, verwenden Sie '-0400' statt' -04: 00' in Ihrer Anfrage. Überprüfen Sie diesen Beitrag bitte https://stackoverflow.com/questions/23251895/how-do-i-get-datetimeformat-working-with-spring-mvc. – eg04lt3r

0

Stellen Sie sicher, dass Sie zu wechseln, da der Parameter value nicht mit Ihrem URL-Parameternamen übereinstimmt, den Sie in Postman verwenden.

Auch mit Blick auf Ihre Protokolle verwenden Sie java.util.Date. Haben Sie darüber nachgedacht, stattdessen die neue Java 8 API java.time.LocalDate zu verwenden?

0

yyyy-MM-dd'T'HH: mm: ssXXX

ANWENDUNG:

yyyy-MM-dd'T'HH: mm: ss.SSSXXX >>> 2017-05-04T12 08: 56,235 bis 07: 00

S Millisekunde X Zeitzone
ISO 8601 Zeitzone -07; -0700; -07: 00

Verwandte Themen