2013-03-01 15 views
83

Ho una richiesta GET che invia una data nel formato AAAA-MM-GG a un controller Spring. Il codice di controllo è la seguente:Come accettare i parametri data in una richiesta GET al controller Spring MVC?

@RequestMapping(value="/fetch" , method=RequestMethod.GET) 
    public @ResponseBody String fetchResult(@RequestParam("from") Date fromDate) { 
     //Content goes here 
    } 

La richiesta viene inviata correttamente come sto controllando con Firebug. ottengo l'errore:

HTTP Status 400: The request sent by the client was syntactically incorrect.

Come posso fare il regolatore accetta questo formato di data? Per favore aiuto. Che cosa sto facendo di sbagliato?

risposta

170

Ok, l'ho risolto. Scrivendolo per chiunque sia stanco dopo un'intera giornata di codifica senza sosta & perdere una cosa così stupida.

@RequestMapping(value="/fetch" , method=RequestMethod.GET) 
    public @ResponseBody String fetchResult(@RequestParam("from") @DateTimeFormat(pattern="yyyy-MM-dd") Date fromDate) { 
     //Content goes here 
    } 

Sì, è semplice. Basta aggiungere l'annotazione DateTimeFormat.

+15

Stavo per scrivere una risposta ma mi hai battuto. Puoi anche usare @DateTimeFormat (iso = ISO.DATE), che è lo stesso formato. A proposito, se puoi, ti suggerisco di usare la libreria DateTime di Joda. Spring lo supporta davvero bene. – Luciano

+0

La risposta è generalmente ok, MA! C'è un modo per configurarlo come predefinito per Spring? È un po 'eccessivo mettere' @ DateTimeFormat 'in ogni controller che hai ... – thorinkor

+2

@Luciano, ovviamente puoi fare @DateTimeFormat (iso = ISO.DATE_TIME) pure – kiedysktos

2

Questo è quello che ho fatto per ottenere data formattata dal front end

@RequestMapping(value = "/{dateString}", method = RequestMethod.GET) 
    @ResponseBody 
    public HttpStatus getSomething(@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) String dateString) { 
    return OK; 
    } 

È possibile utilizzarlo per ottenere quello che vuoi.

+2

Non capisco. A che serve aggiungere @ DateTimeFormat a @ PathVariable se ricevi dateString come String, non come Date? –

Problemi correlati