web-dev-qa-db-fra.com

Utiliser @RequestParam pour plusieurs fichiers est une bonne façon?

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?

15
Pranav C Balan

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).

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

11
Wilson

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é ou PropertyEditor tandis que @RequestPart repose sur HttpMessageConverters 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).

1
Chaturvedi Saurabh