2016-07-02 6 views
7

Ich entwickle eine Federmvc-Anwendung und möchte mehrteilige Anfragen in meinem Controller behandeln. In der Anfrage ich vorbei MultiPartFile auch, zur Zeit @RequestParam Ich verwende die Datei paramaeter zu erhalten, wobei das Verfahren aussehen,Verwenden von @RequestParam für Multipartdatei ist ein richtiger Weg?

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

Above Code funktioniert gut in meinem Service und die Datei auf der Server-Seite wird immer . Jetzt irgendwo habe ich gesehen, dass im Falle der Datei @RequestPart Annotation anstelle von @RequestParam verwenden müssen. Ist etwas falsch, @RequestParam für Datei zu verwenden? Oder kann es in Zukunft irgendwelche Fehler geben?

Antwort

5

Es ist nichts falsch mit @RequestParam mit Multipart Datei.

@RequestParam Anmerkung kann auch Teil einer „multipart/form-data“ Anforderung mit einem Verfahren Argumente zu assoziieren verwendet werden, um die gleichen Methode Argumenttypen unterstützen. Der Hauptunterschied besteht darin, dass, wenn das Methodenargument kein String ist, @RequestParam auf Typ Konvertierung über einen registrierten Konverter oder PropertyEditor angewiesen ist, während @RequestPart auf HttpMessageConverters unter Berücksichtigung der 'Content-Type' Header des Anforderungsteils beruht . @RequestParam ist wahrscheinlich , das mit Name-Wert-Formularfeldern verwendet wird, während @RequestPart wahrscheinlich mit Teilen verwendet wird, die komplexeren Inhalt enthalten (z. B. JSON, XML). .

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

1

Beide der Anmerkungen verwendet werden können, aber Sie Ihre Wahl über sie, basierend auf machen können, wie sie Argumente intern interpretieren.

Die Spring Docs Staaten der Unterschied zwischen ihnen sehr deutlich:

Der wesentliche Unterschied besteht darin, dass, wenn das Verfahren Argument kein String ist, @RequestParam über ein angemeldetes Converter oder PropertyEditor auf Typumwandlung beruht während @RequestPart auf HttpMessageConverters stützt Berücksichtigung des Headers "Content-Type" des Anfrageteils. @RequestPara wird wahrscheinlich mit Name-Wert-Formularfeldern verwendet, während @RequestPart wahrscheinlich mit Teilen verwendet wird, die komplexeren Inhalt enthalten (z. B. JSON, XML).

Verwandte Themen