带注释的表单验证 - 转换失败的自定义消息

shx*_*shx 1 spring spring-mvc

我正在分析spring-mvc-showcase示例项目(spring-mvc-showcase github).当我点击错误的日期格式(屏幕截图上的出生日期字段)时,在JSP页面上显示验证响应的方式会感到困惑.如何在没有那些ConversionFailedException详细信息的情况下使用某些自定义消息使其更加用户友好?

截图:

在此输入图像描述

应用注释驱动的验证.下面是来自表示birthDate字段的bean类的代码段.

FormBean.java

@DateTimeFormat(iso=ISO.DATE)
@Past
private Date birthDate;
Run Code Online (Sandbox Code Playgroud)

负责表单提交的方法:

FormController.java

@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@Valid FormBean formBean, BindingResult result, 
                            @ModelAttribute("ajaxRequest") boolean ajaxRequest, 
                            Model model, RedirectAttributes redirectAttrs) {
    if (result.hasErrors()) {
        return null;
    }
    // Typically you would save to a db and clear the "form" attribute from the session 
    // via SessionStatus.setCompleted(). For the demo we leave it in the session.
    String message = "Form submitted successfully.  Bound " + formBean;
    // Success response handling
    if (ajaxRequest) {
        // prepare model for rendering success message in this request
        model.addAttribute("message", message);
        return null;
    } else {
        // store a success message for rendering on the next request after redirect
        // redirect back to the form to render the success message along with newly bound values
        redirectAttrs.addFlashAttribute("message", message);
        return "redirect:/form";            
    }
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*ral 8

请注意,您在此处使用绑定错误.这些在执行实际JSR-303验证之前很久就会抛出,并且它们会覆盖失败字段的JSR-303约束违规.

绑定错误的代码是typeMismatch.因此,您可以将此示例添加到邮件属性中:

typeMismatch.birthDate = Invalid birth date format.
Run Code Online (Sandbox Code Playgroud)

检查JavaDoc for DefaultMessageCodesResolverDefaultBindingErrorProcessor以了解Spring的错误代码解析是如何工作的.