formDataでファイルとパラメータを同時にSpringのRestControllerで取得する方法
私が1時間半くらい悩んでなかなか見つからなかったので次のために記録します。
ファイルとinputでのパラメータを同時に送信したいときの方法です。
ajaxでfromDataを送信し、Spring RestControllerでファイルとパラメータを取得します。
HTML
<form enctype="multipart/form-data" id="uploadForm"> <p><input type="file" id="file"></p> <p><input type="text" id="text"></p> <input type="button" value="送信" onclick="onclickUpload()" id="submit"> </form>
javascript
unction onclickUpload(){ var formData = new FormData($('#uploadForm').get(0)); $.ajax({ url: '/api/upload/', method:'POST', data: formData, processData:false, contentType:false, cache: false }) .done(function(data, textStatus, jqXHR) { window.alert('結果:成功'); }) .fail(function(jqXHR, textStatus, errorThrown) { window.alert('結果:失敗'); console.log(XMLHttpRequest.status); console.log(textStatus); console.log(errorThrown); });
Java
@RestController public class UploadController{ @RequestMapping(path="/api/upload/, method=RequestMethod.POST) public int upload( HttpSession session, HttpServletResponse servletResponse, @RequestParam MultipartFile file, @RequestParam(name="text")String text) throws Exception{ this.uploadService.execute(file, text); }
fromDataについて
fromDataはform内に記述されているものは全て
var formData = new FormData($('#uploadForm').get(0));
でまとめられて入っているため、
Spring内で使用するときにはajaxのdataにパラメータを入れなくても一緒に入っています。
これに気付かずに小一時間使ってしまった…。