@Test public void testInnerBeanValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); MainBean mainBean = new MainBean(); Errors errors = new BeanPropertyBindingResult(mainBean, "mainBean"); validator.validate(mainBean, errors); Object rejected = errors.getFieldValue("inner.value"); assertNull(rejected); }
/** * Create a new instance of {@link BeanValidatingItemProcessor} with the * default configuration. */ public BeanValidatingItemProcessor() { LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); localValidatorFactoryBean.afterPropertiesSet(); this.validator = localValidatorFactoryBean.getValidator(); }
@Override public WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName) throws Exception { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); WebDataBinder dataBinder = new WebDataBinder(target, objectName); dataBinder.setValidator(validator); return dataBinder; } }
@Configuration public class ValidatorConfig { @Autowired private MessageSource messageSource; @Bean public Validator basicValidator() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setValidationMessageSource(messageSource); return validator; } }
@Bean public javax.validation.Validator localValidatorFactoryBean() { return new LocalValidatorFactoryBean(); }
@Test public void testSimpleValidationWithCustomProvider() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setProviderClass(HibernateValidator.class); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); Set<ConstraintViolation<ValidPerson>> result = validator.validate(person); assertEquals(2, result.size()); for (ConstraintViolation<ValidPerson> cv : result) { String path = cv.getPropertyPath().toString(); if ("name".equals(path) || "address.street".equals(path)) { assertTrue(cv.getConstraintDescriptor().getAnnotation() instanceof NotNull); } else { fail("Invalid constraint violation with path '" + path + "'"); } } Validator nativeValidator = validator.unwrap(Validator.class); assertTrue(nativeValidator.getClass().getName().startsWith("org.hibernate")); assertTrue(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory); assertTrue(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory); validator.destroy(); }
LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean(); factory.setValidationMessageSource( // initialize a ResourceBundleMessageSource ); factory.afterPropertiesSet();
@Bean public LocalValidatorFactoryBean validator(@Qualifier("messageSource") ResourceBundleMessageSource messageSource){ LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); localValidatorFactoryBean.setProviderClass(HibernateValidator.class); localValidatorFactoryBean.setValidationMessageSource(messageSource); return localValidatorFactoryBean; }
import javax.validation.ConstraintViolation; import junit.framework.Assert; import org.hibernate.validator.HibernateValidator; import org.junit.Before; import org.junit.Test; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; private LocalValidatorFactoryBean localValidatorFactory; @Before public void setup() { localValidatorFactory = new LocalValidatorFactoryBean(); localValidatorFactory.setProviderClass(HibernateValidator.class); localValidatorFactory.afterPropertiesSet(); } @Test public void testNullValidationError() { final MyForm myForm= new MyForm (); myForm.setName(null); Set<ConstraintViolation<MyForm >> constraintViolations = localValidatorFactory.validate(myForm); Assert.assertTrue("Your error message", constraintViolations.notNull == null); }
@Bean public LocalValidatorFactoryBean validator() { PlatformResourceBundleLocator resourceBundleLocator = new PlatformResourceBundleLocator(ResourceBundleMessageInterpolator.USER_VALIDATION_MESSAGES, null, true); LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean(); factoryBean.setMessageInterpolator(new ResourceBundleMessageInterpolator(resourceBundleLocator)); return factoryBean; }
void validate() { LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); Set<ConstraintViolation<Msisdn>> violations = localValidatorFactoryBean.getValidator().validate(this); if (!violations.isEmpty()) { throw new ConstraintViolationException(violations); } }
@Bean public Validator localValidatorFactoryBean(ConstraintValidatorFactory constraintValidatorFactory) { LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean(); factoryBean.setConstraintValidatorFactory(constraintValidatorFactory); return factoryBean; } }
@Bean public LocalValidatorFactoryBean getValidatorFactory() { LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); localValidatorFactoryBean.getValidationPropertyMap().put("hibernate.validator.fail_fast", "true"); return localValidatorFactoryBean; }
@Override public void afterPropertiesSet() { try { super.afterPropertiesSet(); } catch (ValidationException ex) { LogFactory.getLog(getClass()).debug("Failed to set up a Bean Validation provider", ex); } }
/** * Set the JSR-303 Validator to delegate to for validating methods. * <p>Default is the default ValidatorFactory's default Validator. */ public void setValidator(Validator validator) { // Unwrap to the native Validator with forExecutables support if (validator instanceof LocalValidatorFactoryBean) { this.validator = ((LocalValidatorFactoryBean) validator).getValidator(); } else if (validator instanceof SpringValidatorAdapter) { this.validator = validator.unwrap(Validator.class); } else { this.validator = validator; } }
@Configuration public class ValidatorConfig { @Autowired private ReloadableResourceBundleMessageSource rrbms; @Bean public LocalValidatorFactoryBean localValidatorFactoryBean(){ LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); localValidatorFactoryBean.setValidationMessageSource(rrbms); return localValidatorFactoryBean; } }
@Test public void getCustomValidator() { given(webMvcConfigurer.getValidator()).willReturn(new LocalValidatorFactoryBean()); delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer)); delegatingConfig.mvcValidator(); verify(webMvcConfigurer).getValidator(); }
@Override public WebDataBinder createBinder(NativeWebRequest request, @Nullable Object target, String objectName) { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); WebDataBinder dataBinder = new WebDataBinder(target, objectName); dataBinder.setValidator(validator); return dataBinder; } }
@Test public void testSimpleValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); Set<ConstraintViolation<ValidPerson>> result = validator.validate(person); assertEquals(2, result.size()); for (ConstraintViolation<ValidPerson> cv : result) { String path = cv.getPropertyPath().toString(); if ("name".equals(path) || "address.street".equals(path)) { assertTrue(cv.getConstraintDescriptor().getAnnotation() instanceof NotNull); } else { fail("Invalid constraint violation with path '" + path + "'"); } } Validator nativeValidator = validator.unwrap(Validator.class); assertTrue(nativeValidator.getClass().getName().startsWith("org.hibernate")); assertTrue(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory); assertTrue(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory); validator.destroy(); }
@Bean(name = "validator") public LocalValidatorFactoryBean getLocalValidatorFactoryBean() { final LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setValidationMessageSource(this.getMessageSource()); validator.afterPropertiesSet(); return validator; } @Bean(name = "messageSource") // --> !!! This is what is so important!!! public MessageSource getMessageSource() { final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); // easily swapped out with "ReloadableResourceBundleMessageSource", my app just doesn't have any necessary reloadable message requirements. messageSource.setBasenames(ERROR_MESSAGE_DIRECTORY); // static String for a direct path to your "ValidationMessages.properties" file or whatever name you've given it. return messageSource; }