Spring Controller @RequestBody avec le téléchargement de fichiers est-il possible?
J'ai un Contrôleur de ce genre et je veux envoyer un formulaire avec téléchargement du fichier ainsi que certaines données de forme d'étiquettes comme indiqué ci-dessous. Aussi, je veux le faire à l'aide de @RequestBody donc je peux utiliser le @Valide annotation sur l'emballage en tant que variables supplémentaires seront ajoutés.
public @ResponseBody WebResponse<Boolean> updateEUSettings(
final Locale locale,
@Validated @ModelAttribute final EUPSettingsWrapper endUserPortalSettingsWrapper) {
}
Et mon wrapper est:
public class EUPSettingsWrapper {
private String label;
private MultipartFile logo;
//getter , setters..etc...
}
Mais je voudrais le convertir en un @RequestBody de ModelAttributes.
La façon dont je suis en train d'essayer, c'est d'avoir l'upload d'un fichier séparé comme paramètre de la requête comme ceci:
public @ResponseBody WebResponse<Boolean> updateEUSettings(
final Locale locale,
@Validated @RequestBody final EUPSettingsWrapper endUserPortalSettingsWrapper,
@RequestParam(value = "file1", required = true) final MultipartFile logo) {
endUserPortalSettingsWrapper.setLogo(logo);
//...
}
Dans ma maquette MVC, je suis en train d':
getMockMvc().perform(fileUpload(uri).file(logo)
.accept(MediaType.APPLICATION_JSON)
.content(JSONUtils.toJSON(wrapper))
.contentType(MediaType.MULTIPART_FORM_DATA))
.andExpect(status().isOk());
Mais j'obtiens une erreur comme celui-ci qui dit:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data' not supported
Quelqu'un a une bonne idée de la façon Multipart les uploads de fichier peut être utilisé avec @RequestBody? Tout ce que je fais de mal?
source d'informationauteur Yatin
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplifier votre vie ici depuis tout ce que vous faites est de la soumission d'un formulaire qui contient des champs et fichier.
Vous ne pas besoin @RequestBody pour ce que vous essayez de faire. Vous pouvez utiliser les Spring MVC, donc votre méthode de contrôleur:
Le client qui soumet la demande au contrôleur en aurez besoin pour avoir un formulaire avec
enctype="multipart/form-data"
.Dans votre Spring MVC test, on peut écrire quelque chose comme ceci:
Ajoutez l'haricot dans votre spring-servlet.xml pour ajouter le support pour multipart demande.
Aussi, ne pas oublier d'ajouter la dépendance de commons fileupload pot
Je ne pouvais pas trouver un moyen d'utiliser @RequestBody.
Cependant, vous pouvez faire quelque chose comme ceci:
Vous pouvez tester de cette façon:
J'ai lutté un peu avec ce et a fini en passant comme paramètres simples. Très bien si vous n'avez pas beaucoup de passage dans votre demande: