2017-01-30 112 views
1

我通过jsp形式发送一个对象到弹簧控制器。弹簧控制器获取空对象

JSP:

<form:form modelAttribute="uploadItem" action="/uploadObject" method="post" enctype="multipart/form-data"> 

<form:input path="fileData" accept="audio/mpeg" type="file" id="file-upload" name="file-upload" /> 

<form:input type="text" path="title" id="upload-title" name="upload-title"/> 

<input type="image" src="..." alt="Upload"/> 

</form:form> 

ModelService:

public void fillUploadMelodyModel(Model model) { 
    fillAdminRootModel(model); 
    model.addAttribute("uploadItem", new UploadedItem()); 
} 

UploadedItem:

public class UploadedItem { 
    private CommonsMultipartFile fileData; 
    private String title; 
} 

控制器:

@RequestMapping(value = "/uploadObject", method = RequestMethod.POST) 
    public String doUpload(UploadedItem uploadItem, BindingResult result, Principal principal) { 
//at this point I get an empty object (null null values) 
} 

问题是什么?如何在jsp中将对象传递给控制器​​?

+0

您向web.xml添加了上传文件的配置吗?最大文件大小? – cralfaro

+0

我使用没有web.xml的spring引导程序 – cadmy

+0

从您的form元素中删除'name'属性,并将'@ ModelAttribute'添加到您的方法参数中。 –

回答

2

尝试过改变你的控制器这样

@RequestMapping(value = "/uploadObject", method = RequestMethod.POST) 
public String doUpload(UploadedItem uploadItem, 
         BindingResult result, 
         @RequestParam("fileData") MultipartFile file, 
         @RequestParam("title") String title, 
         Principal principal) { 
//Here you should receive your parameters 
} 
+1

可以用它来缩短它:'@PostMapping(“/ uploadObject”)' – bphilipnyc

+0

@bphilipnyc不错,我没有使用该注释,但我会:) – cralfaro

0

我认为你已经使用的文件(文件上传)和标题(上传标题)的名称不同步与您的域对象的属性名称。在你的Jsp页面中将你的名字改为fileData和title。