2016-07-02 70 views
7

Sto sviluppando un'applicazione mvc di primavera e desidero gestire la richiesta multipart nel mio controller. Nella richiesta sto passando MultiPartFile anche, attualmente sto usando @RequestParam per ottenere il paramaeter di file, l'aspetto metodo come,L'utilizzo di @RequestParam per multipartfile è corretto?

@RequestMapping(method = RequestMethod.POST) 
public def save(
     @ModelAttribute @Valid Product product, 
     @RequestParam(value = "image", required = false) MultipartFile file) { 
    ..... 
} 

Sopra codice funziona bene nel mio servizio e il file sta ottenendo sul lato server . Ora da qualche parte ho visto che in caso di file è necessario utilizzare l'annotazione @RequestPart anziché @RequestParam. C'è qualcosa di sbagliato nell'uso di @RequestParam per il file? Oppure potrebbe causare qualsiasi tipo di errore in futuro?

risposta

5

Non è niente di sbagliato utilizzando @RequestParam con il file Multipart.

@RequestParam annotazione può anche essere utilizzato per associare la parte di un "/ form-data multipart" richiesta con un argomento metodo sostenere gli stessi tipi di argomenti metodo . La differenza principale è che quando l'argomento del metodo non è una stringa, @RequestParam si basa sulla conversione di tipo tramite un convertitore registrato o PropertyEditor mentre @RequestPart si basa su HttpMessageConverters prendendo in considerazione l'intestazione 'Content-Type' della parte richiesta . @RequestParam è probabilmente da utilizzare con i campi modulo nome-valore mentre @RequestPart è probabile che sia da utilizzare con parti contenenti contenuti più complessi (ad esempio JSON, XML).

Vedi http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestPart.html

1

Entrambe le annotazioni possono essere utilizzati, tuttavia, è possibile fare la vostra scelta su di loro in base a come si interpretano argomenti internamente.

I Spring Docs stati la differenza tra loro in modo molto chiaro:

La differenza principale è che quando l'argomento metodo non è una stringa, @RequestParam si basa sulla conversione di tipo tramite un convertitore raccomandata o PropertyEditor mentre @RequestPart si basa su HttpMessageConverters prendendo in considerazione l'intestazione 'Content-Type' della parte richiesta. È possibile che @RequestPara venga utilizzato con campi modulo nome-valore mentre è probabile che venga utilizzato @RequestPart con parti contenenti contenuto più complesso (ad esempio JSON, XML).