无法使用Spring Boot和Thymeleaf进行验证

Wim*_*uwe 23 java validation spring spring-mvc

我有一个Spring Boot应用程序(使用版本1.2.3)和一个显示表单的控制器.这一切都很好,但现在我想添加验证.我在我的控制器中有这个方法:

@RequestMapping(value = "/licensing", method = RequestMethod.POST)
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, Model model, BindingResult bindingResult )
{
    if( bindingResult.hasErrors())
    {
        logger.debug( "There are errors! {}", bindingResult );
        return "customer/license-registration";
    }
    logger.debug( "customerLicenseRegistration: " + customerLicenseRegistration );
    CustomerLicense customerLicense = m_licenseService.createCustomerLicense( customerLicenseRegistration );
    model.addAttribute( "customerLicense", customerLicense );
    return "customer/license-registration-done";
}
Run Code Online (Sandbox Code Playgroud)

如果我现在键入一些无效的东西,我会在提交后得到"Whitelabel错误页面",并且我的方法中的断点永远不会被击中(如果我删除了@Valid注释,断点就会被击中).错误页面显示:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon May 18 09:42:27 CEST 2015
There was an unexpected error (type=Bad Request, status=400).
Validation failed for object='customerLicenseRegistration'. Error count: 1
Run Code Online (Sandbox Code Playgroud)

Spring似乎注意到该对象无效,但它没有再显示该形式,因此用户可以修复他的错误.我究竟做错了什么?

Wim*_*uwe 65

由于这里的教程,找到了答案.我必须改变我的方法签名:

public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, 
Model model, 
BindingResult bindingResult )
Run Code Online (Sandbox Code Playgroud)

至:

public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, 
BindingResult bindingResult, 
Model model )
Run Code Online (Sandbox Code Playgroud)

注意在我注释的对象之后BindingResult必须立即执行@Valid.

  • 谢谢哥们的回答.我花了几个小时来理解问题是什么,它只是方法签名错配.为我工作.谢谢.:) (7认同)
  • 谢谢:)这些是春天hahahah惹恼我的事情 (3认同)