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;
}
}