Je suis en train de développer une application Spring MVC et je souhaite gérer les demandes en plusieurs parties dans mon contrôleur. Dans la demande, je passe également MultiPartFile
, actuellement j'utilise @RequestParam
pour obtenir le paramètre du fichier, la méthode ressemble,
@RequestMapping(method = RequestMethod.POST)
public def save(
@ModelAttribute @Valid Product product,
@RequestParam(value = "image", required = false) MultipartFile file) {
.....
}
Le code ci-dessus fonctionne bien dans mon service et le fichier devient côté serveur. Maintenant, quelque part, j'ai vu qu'en cas de fichier, il fallait utiliser @RequestPart
annotation au lieu de @RequestParam
. Y a-t-il quelque chose de mal à utiliser @RequestParam
pour le fichier? Ou cela peut-il provoquer toute sorte d'erreur à l'avenir?
Il n'y a rien de mal à utiliser @RequestParam
avec le fichier Multipart
.
L'annotation @RequestParam peut également être utilisée pour associer la partie d'une requête "multipart/form-data" à un argument de méthode prenant en charge les mêmes types d'argument de méthode. La principale différence est que lorsque l'argument de méthode n'est pas une chaîne, @RequestParam s'appuie sur la conversion de type via un convertisseur enregistré ou PropertyEditor tandis que @RequestPart s'appuie sur HttpMessageConverters en tenant compte de l'en-tête `` Content-Type '' de la partie demande. @RequestParam est susceptible d'être utilisé avec des champs de formulaire nom-valeur tandis que @RequestPart est susceptible d'être utilisé avec des parties contenant un contenu plus complexe (par exemple JSON, XML).
Les deux annotations peuvent être utilisées, cependant, vous pouvez faire votre choix à leur sujet en fonction de la façon dont elles interprètent les arguments en interne.
Le Spring Docs indique très clairement la différence entre eux:
La principale différence est que lorsque l'argument de méthode n'est pas une chaîne,
@RequestParam
repose sur la conversion de type via un convertisseur enregistré ouPropertyEditor
tandis que@RequestPart
repose surHttpMessageConverters
en tenant compte de l'en-tête "Content-Type" de la partie de la demande.@RequestPara
est susceptible d'être utilisé avec des champs de formulaire nom-valeur tandis que@RequestPart
est susceptible d'être utilisé avec des parties contenant un contenu plus complexe (par exemple JSON, XML).