@Override public Response toResponse(ConstraintViolationException exception) { LOGGER.debug("Validation constraint violation {}", exception.getConstraintViolations()); ValidationMessage validationMessage = new ValidationMessage(); Set<ConstraintViolation<?>> violations = exception.getConstraintViolations(); Multimap<String, String> errors = ArrayListMultimap.create(); for (ConstraintViolation<?> cv : violations) { String name = StreamSupport.stream(cv.getPropertyPath().spliterator(), false) .map(Path.Node::getName) .reduce((first, second) -> second) .orElseGet(() -> cv.getPropertyPath().toString()); errors.put(name, cv.getMessage()); } validationMessage.setErrors(errors.asMap()); return Response.status(Response.Status.BAD_REQUEST) .entity(validationMessage) .build(); } }
result.getConstraintViolations().stream() .forEach(v -> { Optional<Integer> parameterIndex = StreamSupport.stream(v.getPropertyPath().spliterator(), false) .filter(n -> n.getKind() == ElementKind.PARAMETER) .map(n -> ((Path.ParameterNode) n).getParameterIndex())