hibernate-validator 默认 fast-fail = false,即会验证所有属性

hibernate-validator 使用 fast-fail = true,即只要有一个属性验证失败,就不再继续验证


设置代码:

factoryBean.getValidationPropertyMap().put("hibernate.validator.fail_fast", "true");

整个 WebMvcConfig 代码:
package com.mall;
import ............

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

   @Override
   public void addCorsMappings(CorsRegistry registry) {
      registry.addMapping("/**")//
            .allowedOrigins("*")//
            .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")//
            .maxAge(3600)//
            .allowCredentials(true);
   }

   @Override
   protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
      // 解决controller返回字符串中文乱码问题
      for (HttpMessageConverter<?> converter : converters) {
         if (converter instanceof StringHttpMessageConverter) {
            ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
         } else if (converter instanceof MappingJackson2HttpMessageConverter) {
            ((MappingJackson2HttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
         }
      }
   }

   @Override
   protected Validator getValidator() {
      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
      messageSource.setDefaultEncoding("utf-8");// 读取配置文件的编码格式
      messageSource.setCacheMillis(-1);// 缓存时间,-1表示不过期
      messageSource.setBasename("ValidationMessages");// 配置文件前缀名,设置为Messages,那你的配置文件必须以Messages.properties/Message_en.properties...

      LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
      MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
      factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
      factoryBean.setValidationMessageSource(messageSource);

      factoryBean.getValidationPropertyMap().put("hibernate.validator.fail_fast", "true");

      return factoryBean;
   }
}