ValidationErrorResponse.java

package org.entando.kubernetes.exception.web;

import static java.util.Collections.singletonList;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.context.MessageSource;
import org.springframework.validation.FieldError;

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class ValidationErrorResponse extends ErrorResponse {

    private ErrorData data;

    public ValidationErrorResponse(final String message) {
        super(message);
        data = new ErrorData();
    }

    public ValidationErrorResponse(final String message, @NotNull final List<FieldError> errors) {
        this(message);
        errors.forEach(this::addError);
    }

    public void addError(@NotNull final FieldError fieldError) {
        final String message = fieldError.getDefaultMessage();
        if (fieldError.getArguments() != null) {
            this.data.getErrors().put(fieldError.getField(), singletonList(message));
        }
    }

    public void addError(final MessageSource messageSource, final Locale locale,
            final String property, final String error, final Object[] arguments) {
        final String message = messageSource.getMessage(error, arguments, locale);
        this.data.getErrors().put(property, singletonList(message));
    }

    @Data
    private static class ErrorData {

        private Map<String, List<String>> errors = new HashMap<>();
    }
}