@Test // SPR-15009 public void testCallSetMessageCodesResolverTwice() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("DataBinder is already initialized with MessageCodesResolver"); TestBean testBean = new TestBean(); DataBinder binder = new DataBinder(testBean, "testBean"); binder.setMessageCodesResolver(new DefaultMessageCodesResolver()); binder.setMessageCodesResolver(new DefaultMessageCodesResolver()); }
@Test public void getCustomMessageCodesResolver() { given(webMvcConfigurer.getMessageCodesResolver()).willReturn(new DefaultMessageCodesResolver()); delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer)); delegatingConfig.getMessageCodesResolver(); verify(webMvcConfigurer).getMessageCodesResolver(); }
@Test // SPR-15009 public void testSetCustomMessageCodesResolverAfterInitializeBindingResult() { TestBean testBean = new TestBean(); DataBinder binder = new DataBinder(testBean, "testBean"); binder.initBeanPropertyAccess(); DefaultMessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); messageCodesResolver.setPrefix("errors."); binder.setMessageCodesResolver(messageCodesResolver); MutablePropertyValues mpv = new MutablePropertyValues(); mpv.add("age", "invalid"); binder.bind(mpv); assertEquals("errors.typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); }
@Test // SPR-15009 public void testSetCustomMessageCodesResolverBeforeInitializeBindingResultForDirectFieldAccess() { TestBean testBean = new TestBean(); DataBinder binder = new DataBinder(testBean, "testBean"); DefaultMessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); messageCodesResolver.setPrefix("errors."); binder.setMessageCodesResolver(messageCodesResolver); binder.initDirectFieldAccess(); MutablePropertyValues mpv = new MutablePropertyValues(); mpv.add("age", "invalid"); binder.bind(mpv); assertEquals("errors.typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); }
@Test // SPR-15009 public void testSetCustomMessageCodesResolverBeforeInitializeBindingResultForBeanPropertyAccess() { TestBean testBean = new TestBean(); DataBinder binder = new DataBinder(testBean, "testBean"); DefaultMessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); messageCodesResolver.setPrefix("errors."); binder.setMessageCodesResolver(messageCodesResolver); binder.setAutoGrowCollectionLimit(512); // allow configuration after set a MessageCodesResolver binder.initBeanPropertyAccess(); MutablePropertyValues mpv = new MutablePropertyValues(); mpv.add("age", "invalid"); binder.bind(mpv); assertEquals("errors.typeMismatch", binder.getBindingResult().getFieldError("age").getCode()); assertEquals(512, BeanWrapper.class.cast(binder.getInternalBindingResult().getPropertyAccessor()).getAutoGrowCollectionLimit()); }
DefaultMessageCodesResolver codesResolver = new DefaultMessageCodesResolver(); codesResolver.setPrefix("validation."); errors.setMessageCodesResolver(codesResolver);
/** * Constructs a new ModelAwareErrorCodeConverter with {@link DefaultMessageCodesResolver} as the internal resolver. */ public ModelAwareMessageCodesResolver() { this(new DefaultMessageCodesResolver()); }
public class MyCustomMessageCodesResolver implements MessageCodesResolver { private DefaultMessageCodesResolver defaultMessageCodesResolver = new DefaultMessageCodesResolver(); public String [] resolveMessageCodes(String errorCode, String objectName) { if(errorCode.equals("age")) /** * Set up your custom message right here */ return new String[] {"typeMismatch.age"}; return defaultMessageCodesResolver.resolveMessageCodes(String errorCode, String objectName); } public void String[] resolveMessageCodes(String errorCode, String objectName, String field, Class fieldType) { if(errorCode.equals("age")) /** * Set up your custom message right here */ return new String[] {"typeMismatch.age"}; return defaultMessageCodesResolver.resolveMessageCodes(String errorCode, String objectName, String field, Class fieldType); } }
protected void setUp() throws Exception { requestContext = new MockRequestControlContext(); eventId = "userEvent"; modelName = "model"; codesResolver = new DefaultMessageCodesResolver(); }
public Errors validateParentBean(ParentBean parentBean) { //We create the errors list for the parent bean. DefaultMessageContext msgContext = new DefaultMessageContext(); private MessageCodesResolver messageCodesResolver = new DefaultMessageCodesResolver(); MessageContextErrors parentBeanErrors = new MessageContextErrors(msgContext, "parentBean", null, null, messageCodesResolver, null); List<ChildBean> childBeanList = parentBean.getChildBeans(); //for each childBean for (int childBeanIndex = 0; childBeanIndex < childBeanList.size(); childBeanIndex++) { ChildBean ChildBean = childBeanList.get(childBeanIndex); //we validate the bean. In this method we do the conditionnal validation itself MessageContextErrors childBeanErrors = validateChildBean(ChildBean); //for each error for (int errorIndex = 0; errorIndex < childBeanErrors.getFieldErrors().size(); errorIndex++) { //we "pull" it up, to the parentBean, updating the path in the way FieldError fieldError = (FieldError) childBeanErrors.getFieldErrors().get(errorIndex); parentBeanErrors.rejectValue("childBeans[" + childBeanIndex + "]."+fieldError.getField(), fieldError.getCode()); } } }
@Override protected void setUp() { StaticMessageSource messageSource = new StaticMessageSource(); messageSource.addMessage("foo", Locale.getDefault(), "bar"); messageSource.addMessage("bar", Locale.getDefault(), "{0}"); context = new DefaultMessageContext(messageSource); SpringELExpressionParser parser = new SpringELExpressionParser(new SpelExpressionParser()); DefaultMessageCodesResolver resolver = new DefaultMessageCodesResolver(); errors = new MessageContextErrors(context, "object", new Object(), parser, resolver, null); }