springhibernatespring-mvcspring-mvc-initbinders

org.springframework.validation.BeanPropertyBindingResult Exception


Hi I am a new to spring framework. I have done a small example where I tried to validate my input field using spring validation api. This is the code

@RequestMapping(value = "/applicationFormSubmit", method = RequestMethod.POST)
    public String insertdata( @ModelAttribute("applicationForm") @Valid ApplicationFormBean applicationFormBean, @RequestParam("file") MultipartFile file, BindingResult result,Model model)
{
    if(result.hasErrors())
    {

        return "applicationForm";           
    }
      try {
            Blob blob = Hibernate.createBlob(file.getInputStream());

          //  applicationFormBean..setFilename(file.getOriginalFilename());
            applicationFormBean.setSignature(blob);
          //  applicationFormBean.setContentType(file.getContentType());
        } catch (IOException e) {
            e.printStackTrace();
        }
    applicationFormUserService.insertApplicationData(applicationFormBean);

    return "applicationForm";       

}

But when I submit the from with blank value its given me the following error

Field error in object 'applicationForm' on field 'applicantName': rejected value []; codes [NotEmpty.applicationForm.applicantName,NotEmpty.applicantName,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [applicationForm.applicantName,applicantName]; arguments []; default message [applicantName]]; default message [Please enter your nnnn.]

Field error in object 'applicationForm' on field 'applicantName': rejected value []; codes [Size.applicationForm.applicantName,Size.applicantName,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [applicationForm.applicantName,applicantName]; arguments []; default message [applicantName],20,2]; default message [this is worng ]

Solution

  • Please change the line in your code, which is shown below.

    public String insertdata(
        @ModelAttribute("applicationForm") @Valid ApplicationFormBean applicationFormBean,
        BindingResult result,
        Model model,
        @RequestParam("file") MultipartFile file)
    

    As stated in this Spring MVC tutorial:

    The BindingResult must come right after the model object that is validated or else Spring will fail to validate the object and throw an exception.

    This tutorial also mentions this problem.