18.16.4验证

Spring提供了一个验证器接口,可用于在应用程序的所有层进行验证。 在Spring MVC中,您可以将其配置为用作全局Validator实例,以便在遇到@Valid@Validated控制器方法参数时使用该实例,并且/或者通过@InitBinder方法将其用作控制器内的本地Validator程序。 全局和本地验证器实例可以组合起来提供复合验证。

Spring还支持JSR-303 / JSR-349Bean验证,通过LocalValidatorFactoryBean使Spring org.springframework.validation.Validator接口适应Bean验证javax.validation.Validator契约。 这个类可以作为一个全局验证器插入到Spring MVC中,如下所述。

默认情况下,使用@EnableWebMvc或者<mvc:annotation-driven>当在类路径上检测到一个Bean验证提供程序(如Hibernate Validator)时,通过LocalValidatorFactoryBean在Spring MVC中自动注册Bean验证支持。

有时将LocalValidatorFactoryBean注入到控制器或其他类中很方便。 最简单的方法是声明自己的@Bean,并用@Primary标记以避免与MVC Java配置提供的冲突。如果您更喜欢使用MVC Java配置中的那个,那么您 将需要重写WebMvcConfigurationSupport中的mvcValidator方法,并声明该方法显式返回LocalValidatorFactory而不是Validator。 有关如何切换以扩展提供的配置的信息,请参见Section18.16.13, “Advanced Customizations with MVC Java Config”

或者,您可以配置您自己的全局Validator实例:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public Validator getValidator(); {
        // return "global" validator
    }

}

和XML:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven validator="globalValidator"/>

</beans>

要将全局和本地验证相结合,只需添加一个或多个本地验证程序即可:

@Controller
public class MyController {

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FooValidator());
    }

}

有了这个最小的配置,任何时候遇到@Valid@Validated方法参数,它都将被配置的验证器验证。 任何验证违规将自动作为方法参数可访问的BindingResult中的错误公开,也可以在Spring MVC HTML视图中呈现。

results matching ""

    No results matching ""