I have a Controller like this and I want to submit a form with file uploading as well as some form data like label as shown below. Also, I want to do that using @RequestBody so I can use the @Valid annotation on the wrapper as more variables will be added.
public @ResponseBody WebResponse<Boolean> updateEUSettings( final Locale locale, @Validated @ModelAttribute final EUPSettingsWrapper endUserPortalSettingsWrapper) { } And my wrapper is:
public class EUPSettingsWrapper { private String label; private MultipartFile logo; // getter , setters..etc... } But I would like to convert it into a @RequestBody from ModelAttributes.
The way I'm trying is by having the file upload separated as request parameter like this:
public @ResponseBody WebResponse<Boolean> updateEUSettings( final Locale locale, @Validated @RequestBody final EUPSettingsWrapper endUserPortalSettingsWrapper, @RequestParam(value = "file1", required = true) final MultipartFile logo) { endUserPortalSettingsWrapper.setLogo(logo); // ... } In my mock MVC, I am setting:
getMockMvc().perform(fileUpload(uri).file(logo) .accept(MediaType.APPLICATION_JSON) .content(JSONUtils.toJSON(wrapper)) .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isOk()); But I'm getting an error like this which says:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data' not supported Does anyone have a good idea of how Multipart file uploads can be used with @RequestBody? Anything I am doing wrong above?