user2259555
user2259555

Reputation: 233

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

I have a form which a user is to use to upload a file to a local drive and also persist some data to the database. But this error message has come up which I would like to know how to deal with it.

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

The controller

@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";
    }

The form itself

 <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>

I'm trying to save the form first the I will use a separate method to send it.

Upvotes: 3

Views: 14311

Answers (2)

Alexandru Ceausu
Alexandru Ceausu

Reputation: 317

The error HTTP Status 400 - The request sent by the client was syntactically incorrect. can come from a missing multipartResolver in the context (servlet-context.xml)

`<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />`

For more info, see the replies from SpringMVC-FileUpload - The request sent by the client was syntactically incorrect

Upvotes: 0

Sotirios Delimanolis
Sotirios Delimanolis

Reputation: 280136

Your method is declared as such:

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

Assuming that you are trying to apply the BindingResult to the Module instance, you need to change the method definition so that the BindingResult comes right after the Module instance.

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

See the reference for more details

The Errors or BindingResult parameters have to follow the model object that is being bound immediately as the method signature might have more that one model object and Spring will create a separate BindingResult instance for each of them [...]

See here.

Upvotes: 9

Related Questions