【问题标题】:org.springframework.validation.BeanPropertyBindingResult Exceptionorg.springframework.validation.BeanPropertyBindingResult 异常
【发布时间】:2014-09-08 06:34:41
【问题描述】:

您好,我是 Spring 框架的新手。我做了一个小例子,我尝试使用 spring 验证 api 验证我的输入字段。这是代码

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

}

但是当我提交带有空白值的 from 时,它给了我以下错误

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 ]

【问题讨论】:

    标签: spring hibernate spring-mvc spring-mvc-initbinders


    【解决方案1】:

    关于@ASADUL,我还通过更改方法的签名顺序解决了这个问题。

    在我的情况下,HttpServletRequest request 位于导致错误的 @ModelAttribute(FORM_MODEL_KEY) @Valid MemberForm memberForm 旁边。

    @PostMapping(URLS.MEMBER_PROCESSING)
        public String processMemberForm(@ModelAttribute(FORM_MODEL_KEY) @Valid MemberForm memberForm, HttpServletRequest request, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
    

    我改成

    @PostMapping(URLS.MEMBER_PROCESSING)
        public String processMemberForm(@ModelAttribute(FORM_MODEL_KEY) @Valid MemberForm memberForm, BindingResult bindingResult, HttpServletRequest request, RedirectAttributes redirectAttributes) {
    

    注意HttpServletRequest request必须放在BindingResult bindingResult之后,@ModelAttribute(FORM_MODEL_KEY) @Valid MemberForm memberForm, BindingResult bindingResult必须按照这个顺序。

    【讨论】:

      【解决方案2】:

      请更改代码中的行,如下所示。

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

      this Spring MVC tutorial中所述:

      BindingResult 必须紧跟在经过验证的模型对象之后,否则 Spring 将无法验证该对象并抛出异常。

      This tutorial也提到了这个问题。

      【讨论】:

      • 太棒了。已经为此苦苦挣扎了 2 个小时。我只记得几年前我犯了同样的错误。很容易错过。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 2019-03-18
      • 1970-01-01
      • 2016-09-11
      • 2021-12-05
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多