2016-08-03 26 views
0

Ich versuche, eine Controller-Request-Methode zu schreiben, die einen Date-Parameter akzeptiert, der als iso-formatierter Date-Time-String gesendet wird. It looks like you can specify a format manually, den Methodenparameter mit @DateTimeFormat(pattern="yyyy-MM-dd") annotieren, aber ich möchte die iso Einstellung verwenden. I.e. @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME). Mit dem ISO-Datum-Zeit-Format kann ich es nicht einmal dazu bringen, das Beispieldatum in der Dokumentation zu analysieren. Ich frage mich, ob ich etwas falsch mache.Wie mache ich eine Spring-Boot-Request-Methode akzeptieren eine ISO-formatierte Datumsparam?

Hier ist meine Controller-Klasse:

@RestController 
public class DateController { 

    @RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET) 
    public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date date){ 
     return new ResponseEntity<>(date.toString(), HttpStatus.OK); 
    } 

    @RequestMapping(path = "/echoDumbDate", method = RequestMethod.GET) 
    public ResponseEntity<String> echoDumbDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date){ 
     return new ResponseEntity<>(date.toString(), HttpStatus.OK); 
    } 
} 

Wenn ich versuche, diesen Controller mit dem Datum zu nennen Ich mag es tatsächlich analysieren funktioniert nicht:

http://localhost:8080/echoIsoDate?date=2015-12-30T00:00:00.000Z 

Als ich zu nennen versuchen dieser Controller with the example date from the documentation es funktioniert nicht:

http://localhost:8080/echoIsoDate?date=2000-10-31%2001:30:00.000-05:00 

Der zweite Controller-Methode doe s Arbeit. ZB Aufruf http://localhost:8080/echoDumbDate?date=1970-01-01 gibt Thu Jan 01 00:00:00 CST 1970 zurück (Aber dann ist es in CST, die vermutlich in meiner Systemzeitzone ist).

Fragen:

  • Was bin ich in echoIsoDate() falsch? Oder gibt es im Frühjahr einen Fehler?
  • Für echoDumbDate() gibt es eine Möglichkeit, die gewünschte Zeitzone anzugeben, so dass es immer UTC verwendet?

Antwort

1

versuchen, diese stattdessen

@RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET) 
public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") Date date){ 
    return new ResponseEntity<>(date.toString(), HttpStatus.OK); 
}