Object[] validationHints = (hints instanceof Object[] ? (Object[]) hints : new Object[] {hints}); BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(target, getParameterName(parameter)); if (!ObjectUtils.isEmpty(validationHints) && this.validator instanceof SmartValidator) { ((SmartValidator) this.validator).validate(target, bindingResult, validationHints); this.validator.validate(target, bindingResult); if (bindingResult.hasErrors()) { throw new MethodArgumentNotValidException(message, parameter, bindingResult);
/** * Create the {@link AbstractPropertyBindingResult} instance using standard * JavaBean property access. * @since 4.2.1 */ protected AbstractPropertyBindingResult createBeanPropertyBindingResult() { BeanPropertyBindingResult result = new BeanPropertyBindingResult(getTarget(), getObjectName(), isAutoGrowNestedPaths(), getAutoGrowCollectionLimit()); if (this.conversionService != null) { result.initConversion(this.conversionService); } if (this.messageCodesResolver != null) { result.setMessageCodesResolver(this.messageCodesResolver); } return result; }
/** * Create a new {@link BeanWrapper} for the underlying target object. * @see #getTarget() */ protected BeanWrapper createBeanWrapper() { if (this.target == null) { throw new IllegalStateException("Cannot access properties on null bean instance '" + getObjectName() + "'"); } return PropertyAccessorFactory.forBeanPropertyAccess(this.target); }
@Test // SPR-15839 public void testMapValueConstraint() { Map<String, String> property = new HashMap<>(); property.put("no value can be", null); BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint(); bean.setProperty(property); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); validatorAdapter.validate(bean, errors); assertThat(errors.getFieldErrorCount("property[no value can be]"), is(1)); assertNull(errors.getFieldValue("property[no value can be]")); }
/** * Create a new BindException instance for a target bean. * @param target target bean to bind onto * @param objectName the name of the target object * @see BeanPropertyBindingResult */ public BindException(Object target, String objectName) { Assert.notNull(target, "Target object must not be null"); this.bindingResult = new BeanPropertyBindingResult(target, objectName); }
@Test // SPR-13406 public void testApplyMessageSourceResolvableToStringArgumentValueWithResolvedLogicalFieldName() { TestBean testBean = new TestBean(); testBean.setPassword("password"); testBean.setConfirmPassword("PASSWORD"); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(testBean, "testBean"); validatorAdapter.validate(testBean, errors); assertThat(errors.getFieldErrorCount("password"), is(1)); assertThat(errors.getFieldValue("password"), is("password")); assertThat(messageSource.getMessage(errors.getFieldError("password"), Locale.ENGLISH), is("Password must be same value with Password(Confirm)")); }
@Test public void testSpringValidationWithErrorInListElement() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); person.getAddressList().add(new ValidAddress()); BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); validator.validate(person, result); assertEquals(3, result.getErrorCount()); FieldError fieldError = result.getFieldError("name"); assertEquals("name", fieldError.getField()); fieldError = result.getFieldError("address.street"); assertEquals("address.street", fieldError.getField()); fieldError = result.getFieldError("addressList[0].street"); assertEquals("addressList[0].street", fieldError.getField()); }
protected BeanPropertyBindingResult checkDataObjectModelForDelete(DataObjectModel model, DataModelDto dto) throws ApsSystemException { BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(model, "dataObjectModel"); if (null == model) { return bindingResult; } Map<String, List<IPage>> pages = this.getDataObjectModelManager().getReferencingPages(model.getId()); if (!bindingResult.hasErrors() && !pages.isEmpty()) { bindingResult.reject(GuiFragmentValidator.ERRCODE_FRAGMENT_REFERENCES, new Object[]{String.valueOf(model.getId())}, "guifragment.cannot.delete.references"); } return bindingResult; }
BeanPropertyBindingResult errors = new BeanPropertyBindingResult(tb, "tb"); DefaultMessageCodesResolver codesResolver = new DefaultMessageCodesResolver(); codesResolver.setPrefix("validation."); errors.setMessageCodesResolver(codesResolver); errors.setNestedPath("spouse."); assertEquals("spouse.", errors.getNestedPath()); Validator spouseValidator = new SpouseValidator(); spouseValidator.validate(tb.getSpouse(), errors); errors.setNestedPath(""); assertTrue(errors.hasErrors()); assertEquals(6, errors.getErrorCount()); assertEquals(2, errors.getGlobalErrorCount()); assertEquals("validation.NAME_TOUCHY_MISMATCH", errors.getGlobalError().getCode()); assertEquals("validation.NAME_TOUCHY_MISMATCH", (errors.getGlobalErrors().get(0)).getCode()); assertEquals("validation.NAME_TOUCHY_MISMATCH.tb", (errors.getGlobalErrors().get(0)).getCodes()[0]); assertEquals("validation.NAME_TOUCHY_MISMATCH", (errors.getGlobalErrors().get(0)).getCodes()[1]); assertEquals("tb", (errors.getGlobalErrors().get(0)).getObjectName()); assertEquals("validation.GENERAL_ERROR", (errors.getGlobalErrors().get(1)).getCode()); assertEquals("validation.GENERAL_ERROR.tb", (errors.getGlobalErrors().get(1)).getCodes()[0]); assertEquals("validation.GENERAL_ERROR", (errors.getGlobalErrors().get(1)).getCodes()[1]); assertEquals("msg", (errors.getGlobalErrors().get(1)).getDefaultMessage()); assertEquals("arg", (errors.getGlobalErrors().get(1)).getArguments()[0]); assertTrue(errors.hasFieldErrors()); assertEquals(4, errors.getFieldErrorCount()); assertEquals("validation.TOO_YOUNG", errors.getFieldError().getCode());
@Test // SPR-16177 public void testWithList() { Parent parent = new Parent(); parent.setName("Parent whit list"); parent.getChildList().addAll(createChildren(parent)); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(parent, "parent"); validatorAdapter.validate(parent, errors); assertTrue(errors.getErrorCount() > 0); }
this.bean.setRealCountry(Country.COUNTRY_UK); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(this.bean, COMMAND_NAME); FormattingConversionService cs = new FormattingConversionService(); cs.addFormatterForFieldType(Country.class, new Formatter<Country>() { errors.initConversion(cs); exposeBindingResult(errors);
@Test public void customBind() throws Exception { BeanPropertyBindingResult result = new BeanPropertyBindingResult(createTestBean(), "testBean"); result.getPropertyAccessor().registerCustomEditor(Float.class, new SimpleFloatEditor()); exposeBindingResult(result); this.tag.setPath("myFloat"); assertEquals(Tag.SKIP_BODY, this.tag.doStartTag()); String output = getOutput(); assertContainsAttribute(output, "name", "myFloat"); assertBlockTagContains(output, "12.34f"); }
@Test public void testListValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ListContainer listContainer = new ListContainer(); listContainer.addString("A"); listContainer.addString("X"); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(listContainer, "listContainer"); errors.initConversion(new DefaultConversionService()); validator.validate(listContainer, errors); FieldError fieldError = errors.getFieldError("list[1]"); assertEquals("X", errors.getFieldValue("list[1]")); }
@Test public void testRejectWithoutDefaultMessage() { TestBean tb = new TestBean(); tb.setName("myName"); tb.setAge(99); BeanPropertyBindingResult ex = new BeanPropertyBindingResult(tb, "tb"); ex.reject("invalid"); ex.rejectValue("age", "invalidField"); StaticMessageSource ms = new StaticMessageSource(); ms.addMessage("invalid", Locale.US, "general error"); ms.addMessage("invalidField", Locale.US, "invalid field"); assertEquals("general error", ms.getMessage(ex.getGlobalError(), Locale.US)); assertEquals("invalid field", ms.getMessage(ex.getFieldError("age"), Locale.US)); }
@Test public void testListValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ListContainer listContainer = new ListContainer(); listContainer.addString("A"); listContainer.addString("X"); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(listContainer, "listContainer"); errors.initConversion(new DefaultConversionService()); validator.validate(listContainer, errors); assertEquals("X", errors.getFieldValue("list[1]")); }
@Test // SPR-15839 public void testMapEntryConstraint() { Map<String, String> property = new HashMap<>(); property.put(null, null); BeanWithMapEntryConstraint bean = new BeanWithMapEntryConstraint(); bean.setProperty(property); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(bean, "bean"); validatorAdapter.validate(bean, errors); assertTrue(errors.hasFieldErrors("property[]")); assertNull(errors.getFieldValue("property[]")); }
@Override public Widget execute() { Widget widget = null; // TODO - improve info sent back to marketplace, rather then just writing to the console try { widget = marketplaceService.resolveWidgetMetadata(url, providerType); if(widget == null){ return null; } BeanPropertyBindingResult results = new BeanPropertyBindingResult(widget, "widget"); widgetValidator.validate(widget, results); if (results.hasErrors()) { if(results.hasFieldErrors("url") && results.getFieldError("url").toString().contains("widget.url.exists")){ return widgetService.getWidgetByUrl(widget.getUrl()); } return null; } return marketplaceService.addWidget(widget); } catch (Exception e) { logger.error(e.getMessage()); return null; } } }.getResult();
@Test public void testSpringValidationWithClassLevel() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); person.setName("Juergen"); person.getAddress().setStreet("Juergen's Street"); BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); validator.validate(person, result); assertEquals(1, result.getErrorCount()); ObjectError globalError = result.getGlobalError(); List<String> errorCodes = Arrays.asList(globalError.getCodes()); assertEquals(2, errorCodes.size()); assertTrue(errorCodes.contains("NameAddressValid.person")); assertTrue(errorCodes.contains("NameAddressValid")); }
@RequestMapping(method = RequestMethod.POST) public ResponseEntity<?> createOrder(@RequestBody @Validated(InputChecks.class) Order order) throws NoSuchMethodException, SecurityException, MethodArgumentNotValidException { // Some processing of the Order goes here SpringValidatorAdapter v = new SpringValidatorAdapter(validator); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(order, "order"); v.validate(order, errors, FinalChecks.class); if (errors.hasErrors()) { throw new MethodArgumentNotValidException( new MethodParameter(this.getClass().getDeclaredMethod("createOrder", Order.class), 0), errors); } orders.put(order); HttpHeaders headers = new HttpHeaders(); headers.setLocation(ServletUriComponentsBuilder.fromCurrentRequest().path("/" + order.getId()).build().toUri()); return new ResponseEntity<>(null, headers, HttpStatus.CREATED); }
@Test public void handleMethodArgumentNotValid() throws Exception { BeanPropertyBindingResult errors = new BeanPropertyBindingResult(new TestBean(), "testBean"); errors.rejectValue("name", "invalid"); MethodParameter parameter = new MethodParameter(this.getClass().getMethod("handle", String.class), 0); MethodArgumentNotValidException ex = new MethodArgumentNotValidException(parameter, errors); ModelAndView mav = exceptionResolver.resolveException(request, response, null, ex); assertNotNull("No ModelAndView returned", mav); assertTrue("No Empty ModelAndView returned", mav.isEmpty()); assertEquals("Invalid status code", 400, response.getStatus()); }