Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

spring

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.

like image 973
user2259555 Avatar asked Jun 01 '26 06:06

user2259555


1 Answers

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.

like image 156
Sotirios Delimanolis Avatar answered Jun 04 '26 12:06

Sotirios Delimanolis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!