I'm developing a spring mvc application and I want to handle multipart request in my controller. In the request I'm passing MultiPartFile
also, currently I'm using @RequestParam
to get the file parameter, the method look like,
@RequestMapping(method = RequestMethod.POST) public def save( @ModelAttribute @Valid Product product, @RequestParam(value = "image", required = false) MultipartFile file) { ..... }
Above code works well in my service and the file is getting on the server side. Now somewhere I saw that in cases that file need to use @RequestPart
annotation instead of @RequestParam
. Is there anything wrong to use @RequestParam
for file ? Or it may cause any kind of error in future?
I've read in this post that @RequestParam can only be used for get methods, but if I remove @RequestParam and stick with the params argument of the @PostMapping annotation it still doesn't work. I know I can use @RequestBody but I do not want to make a class just for those 4 parameters.
Using @RequestParam required=falseTo support optional query string parameters in a controller, we can use @RequestParam with required=false flag. Now, we can omit the id parameter from our request.
The @RequestParam is used to read the HTML form data provided by a user and bind it to the request parameter. The Model contains the request data and provides it to view page.
The main difference is that when the method argument is not a String or raw MultipartFile / Part , @RequestParam relies on type conversion via a registered Converter or PropertyEditor while RequestPart relies on HttpMessageConverters taking into consideration the 'Content-Type' header of the request part.
It is nothing wrong using @RequestParam
with Multipart
file.
@RequestParam annotation can also be used to associate the part of a "multipart/form-data" request with a method argument supporting the same method argument types. The main difference is that when the method argument is not a String, @RequestParam relies on type conversion via a registered Converter or PropertyEditor while @RequestPart relies on HttpMessageConverters taking into consideration the 'Content-Type' header of the request part. @RequestParam is likely to be used with name-value form fields while @RequestPart is likely to be used with parts containing more complex content (e.g. JSON, XML).
See http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestPart.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With