2013-05-06 97 views
3

我有一个表单,用户将使用该表单将文件上传到本地驱动器,并将一些数据保留到数据库。但是这个错误信息已经出现了,我想知道如何处理它。春季HTTP状态400 - 客户端发送的请求在语法上不正确

HTTP Status 400 - The request sent by the client was syntactically incorrect. 

控制器

@RequestMapping(value = "/main/user/setter/addpage", method = 

RequestMethod.POST, params = "save") 
public String saveProcess(@ModelAttribute("module") Module module, 

@RequestParam("userId") Integer userId, 
@RequestParam("name") String name, 
@RequestParam("file") MultipartFile file, 
BindingResult result, HttpSession session) { 
    if (result.hasErrors()) { 
     return "redirect:/main/user/setter/settingpage"; 
    } 
    else 
    if(module != null){ 

     try { 

      MultipartFile filea = module.getFileData(); 

      InputStream inputStream = null; 
      OutputStream outputStream = null; 
      if (filea.getSize() > 0) { 
      inputStream = filea.getInputStream(); 
      outputStream = new FileOutputStream("C:\\Test\\" 
      + filea.getOriginalFilename()); 
      System.out.println("Uploaded File Name"); 
      System.out.println(filea.getOriginalFilename()); 
          int readBytes = 0; 
      byte[] buffer = new byte[8192]; 
      while ((readBytes = inputStream.read(buffer, 0, 8192)) != 

          -1) { 
      outputStream.write(buffer, 0, readBytes); 
      } 
      outputStream.close(); 
      inputStream.close(); 
      session.setAttribute("success", "File Uploaded"); 
      session.setAttribute("uploadFile", "C:\\Test\\" 
      + filea.getOriginalFilename()); 
      } 
      } catch (Exception e) { 
      e.printStackTrace(); 
      } 

} 
// Delegate to service 
moduleService.add(userId, module); 

return "redirect:/main/user/setter/settingpage"; 
    } 

形式本身

<c:url var="processUrl" value="/main/user/setter/addpage?userId=2" /> 
<form:form modelAttribute="module" method="POST" action="${processUrl}" name="module" 

enctype="multipart/form-data"> 

<form:label path="fileName">Document Title:</form:label> 
<form:input path="fileName" name="name"/><br/> 

<form:label path="documentPath">Coursework Sample:</form:label> 
<form:input path="documentPath" type="file" name="file" id="file" size="43.9"/><br/> 

<form:label path="liveDate">Live Date:</form:label> 
<form:input path="liveDate"/><br/> 

    <input type="submit" name="save" value="Save" id="save"/> 
    <input type="submit" name="send" value="Send" id="send"/> 

</form:form> 

我试图保存表单首先我会用一个单独的方法来发送。

+0

您可以执行与DEBUG方法相同的请求的答复,或设置一个http://requestb.in并将实际的请求添加到问题中。 – ssedano 2013-05-06 12:52:17

+0

我设置了一个requestb.in并对其进行了测试。它返回了正确的页面。该方法的逻辑是抛出错误。 – user2259555 2013-05-06 13:49:04

+2

将方法参数列表中的'BindingResult'对象移到与其相关的对象旁边,可能是'Module'。 – 2013-05-06 13:54:00

回答

9

你的方法声明为这样:

public String saveProcess(@ModelAttribute("module") Module module, 
@RequestParam("userId") Integer userId, 
@RequestParam("name") String name, 
@RequestParam("file") MultipartFile file, 
BindingResult result, HttpSession session) ... 

假设你正在尝试应用BindingResultModule情况下,你需要改变的方法定义,以便BindingResultModule实例之后说到。

public String saveProcess(@ModelAttribute("module") Module module, 
BindingResult result, 
@RequestParam("userId") Integer userId, 
@RequestParam("name") String name, 
@RequestParam("file") MultipartFile file, 
HttpSession session) ... 

详情参见

的错误或BindingResult参数的参考必须遵循被立即绑定方法签名模型对象 可能有 不止一个模型对象和Spring将创建一个单独的 BindingResult实例为他们每个人[...]

请参阅here

相关问题