use of org.springframework.validation.BindingResult in project alf.io by alfio-event.
the class AdditionalServiceApiController method insert.
@PostMapping(value = "/event/{eventId}/additional-services")
@Transactional
public ResponseEntity<EventModification.AdditionalService> insert(@PathVariable("eventId") int eventId, @RequestBody EventModification.AdditionalService additionalService, BindingResult bindingResult) {
ValidationResult validationResult = Validator.validateAdditionalService(additionalService, bindingResult);
Validate.isTrue(validationResult.isSuccess(), "validation failed");
return eventRepository.findOptionalById(eventId).map(event -> ResponseEntity.ok(eventManager.insertAdditionalService(event, additionalService))).orElseThrow(IllegalArgumentException::new);
}
use of org.springframework.validation.BindingResult in project grails-core by grails.
the class DataBindingUtils method bindObjectToDomainInstance.
/**
* Binds the given source object to the given target object performing type conversion if necessary
*
* @param domain The GrailsDomainClass instance
* @param object The object to bind to
* @param source The source object
* @param include The list of properties to include
* @param exclude The list of properties to exclude
* @param filter The prefix to filter by
*
* @see grails.core.GrailsDomainClass
*
* @return A BindingResult or null if it wasn't successful
*/
@SuppressWarnings("unchecked")
public static BindingResult bindObjectToDomainInstance(GrailsDomainClass domain, Object object, Object source, List include, List exclude, String filter) {
BindingResult bindingResult = null;
GrailsApplication grailsApplication = null;
if (domain != null) {
grailsApplication = domain.getApplication();
}
if (grailsApplication == null) {
grailsApplication = Holders.findApplication();
}
try {
final DataBindingSource bindingSource = createDataBindingSource(grailsApplication, object.getClass(), source);
final DataBinder grailsWebDataBinder = getGrailsWebDataBinder(grailsApplication);
grailsWebDataBinder.bind(object, bindingSource, filter, include, exclude);
} catch (InvalidRequestBodyException e) {
String messageCode = "invalidRequestBody";
Class objectType = object.getClass();
String defaultMessage = "An error occurred parsing the body of the request";
String[] codes = getMessageCodes(messageCode, objectType);
bindingResult = new BeanPropertyBindingResult(object, objectType.getName());
bindingResult.addError(new ObjectError(bindingResult.getObjectName(), codes, null, defaultMessage));
} catch (Exception e) {
bindingResult = new BeanPropertyBindingResult(object, object.getClass().getName());
bindingResult.addError(new ObjectError(bindingResult.getObjectName(), e.getMessage()));
}
if (domain != null && bindingResult != null) {
BindingResult newResult = new ValidationErrors(object);
for (Object error : bindingResult.getAllErrors()) {
if (error instanceof FieldError) {
FieldError fieldError = (FieldError) error;
final boolean isBlank = BLANK.equals(fieldError.getRejectedValue());
if (!isBlank) {
newResult.addError(fieldError);
} else if (domain.hasPersistentProperty(fieldError.getField())) {
final boolean isOptional = domain.getPropertyByName(fieldError.getField()).isOptional();
if (!isOptional) {
newResult.addError(fieldError);
}
} else {
newResult.addError(fieldError);
}
} else {
newResult.addError((ObjectError) error);
}
}
bindingResult = newResult;
}
MetaClass mc = GroovySystem.getMetaClassRegistry().getMetaClass(object.getClass());
if (mc.hasProperty(object, "errors") != null && bindingResult != null) {
ValidationErrors errors = new ValidationErrors(object);
errors.addAllErrors(bindingResult);
mc.setProperty(object, "errors", errors);
}
return bindingResult;
}
use of org.springframework.validation.BindingResult in project grails-core by grails.
the class AbstractConstraint method rejectValueWithDefaultMessage.
public void rejectValueWithDefaultMessage(Object target, Errors errors, String defaultMessage, String[] codes, Object[] args) {
BindingResult result = (BindingResult) errors;
Set<String> newCodes = new LinkedHashSet<String>();
if (args.length > 1 && messageSource != null) {
if ((args[0] instanceof String) && (args[1] instanceof Class<?>)) {
final Locale locale = LocaleContextHolder.getLocale();
final Class<?> constrainedClass = (Class<?>) args[1];
final String fullClassName = constrainedClass.getName();
String classNameCode = fullClassName + ".label";
String resolvedClassName = messageSource.getMessage(classNameCode, null, fullClassName, locale);
final String classAsPropertyName = GrailsNameUtils.getPropertyName(constrainedClass);
if (resolvedClassName.equals(fullClassName)) {
// try short version
classNameCode = classAsPropertyName + ".label";
resolvedClassName = messageSource.getMessage(classNameCode, null, fullClassName, locale);
}
// update passed version
if (!resolvedClassName.equals(fullClassName)) {
args[1] = resolvedClassName;
}
String propertyName = (String) args[0];
String propertyNameCode = fullClassName + '.' + propertyName + ".label";
String resolvedPropertyName = messageSource.getMessage(propertyNameCode, null, propertyName, locale);
if (resolvedPropertyName.equals(propertyName)) {
propertyNameCode = classAsPropertyName + '.' + propertyName + ".label";
resolvedPropertyName = messageSource.getMessage(propertyNameCode, null, propertyName, locale);
}
// update passed version
if (!resolvedPropertyName.equals(propertyName)) {
args[0] = resolvedPropertyName;
}
}
}
//Qualified class name is added first to match before unqualified class (which is still resolved for backwards compatibility)
newCodes.addAll(Arrays.asList(result.resolveMessageCodes(constraintOwningClass.getName() + '.' + constraintPropertyName + '.' + getName() + ".error", constraintPropertyName)));
newCodes.addAll(Arrays.asList(result.resolveMessageCodes(classShortName + '.' + constraintPropertyName + '.' + getName() + ".error", constraintPropertyName)));
for (String code : codes) {
newCodes.addAll(Arrays.asList(result.resolveMessageCodes(constraintOwningClass.getName() + '.' + constraintPropertyName + '.' + code, constraintPropertyName)));
newCodes.addAll(Arrays.asList(result.resolveMessageCodes(classShortName + '.' + constraintPropertyName + '.' + code, constraintPropertyName)));
//We resolve the error code on it's own last so that a global code doesn't override a class/field specific error
newCodes.addAll(Arrays.asList(result.resolveMessageCodes(code, constraintPropertyName)));
}
FieldError error = new FieldError(errors.getObjectName(), errors.getNestedPath() + constraintPropertyName, getPropertyValue(errors, target), false, newCodes.toArray(new String[newCodes.size()]), args, defaultMessage);
((BindingResult) errors).addError(error);
}
use of org.springframework.validation.BindingResult in project spring-framework by spring-projects.
the class ModelResultMatchers method attributeHasFieldErrorCode.
/**
* Assert a field error code for a model attribute using a {@link org.hamcrest.Matcher}.
* @since 4.1
*/
public <T> ResultMatcher attributeHasFieldErrorCode(final String name, final String fieldName, final Matcher<? super String> matcher) {
return new ResultMatcher() {
@Override
public void match(MvcResult mvcResult) throws Exception {
ModelAndView mav = getModelAndView(mvcResult);
BindingResult result = getBindingResult(mav, name);
assertTrue("No errors for attribute: [" + name + "]", result.hasErrors());
boolean hasFieldErrors = result.hasFieldErrors(fieldName);
assertTrue("No errors for field: [" + fieldName + "] of attribute [" + name + "]", hasFieldErrors);
String code = result.getFieldError(fieldName).getCode();
assertThat("Field name '" + fieldName + "' of attribute '" + name + "'", code, matcher);
}
};
}
use of org.springframework.validation.BindingResult in project spring-framework by spring-projects.
the class ModelResultMatchers method attributeHasErrors.
/**
* Assert the given model attribute(s) have errors.
*/
public ResultMatcher attributeHasErrors(final String... names) {
return new ResultMatcher() {
@Override
public void match(MvcResult mvcResult) throws Exception {
ModelAndView mav = getModelAndView(mvcResult);
for (String name : names) {
BindingResult result = getBindingResult(mav, name);
assertTrue("No errors for attribute [" + name + "]", result.hasErrors());
}
}
};
}
Aggregations