63 lines
2.3 KiB
Java
63 lines
2.3 KiB
Java
package eu.eudat.controllers.controllerhandler;
|
|
|
|
import eu.eudat.models.errormodels.ValidationErrorContext;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.context.MessageSource;
|
|
import org.springframework.context.i18n.LocaleContextHolder;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.validation.BindingResult;
|
|
import org.springframework.validation.FieldError;
|
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
|
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
|
|
|
|
@ControllerAdvice
|
|
public class ControllerErrorHandler {
|
|
|
|
private MessageSource messageSource;
|
|
|
|
@Autowired
|
|
public ControllerErrorHandler(MessageSource messageSource) {
|
|
this.messageSource = messageSource;
|
|
}
|
|
|
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
|
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
|
@ResponseBody
|
|
public ValidationErrorContext processValidationError(MethodArgumentNotValidException ex) {
|
|
BindingResult result = ex.getBindingResult();
|
|
List<FieldError> fieldErrors = result.getFieldErrors();
|
|
|
|
return processFieldErrors(fieldErrors);
|
|
}
|
|
|
|
private ValidationErrorContext processFieldErrors(List<FieldError> fieldErrors) {
|
|
ValidationErrorContext dto = new ValidationErrorContext();
|
|
|
|
for (FieldError fieldError: fieldErrors) {
|
|
String localizedErrorMessage = resolveLocalizedErrorMessage(fieldError);
|
|
dto.addFieldError(fieldError.getField(), localizedErrorMessage);
|
|
}
|
|
|
|
return dto;
|
|
}
|
|
|
|
private String resolveLocalizedErrorMessage(FieldError fieldError) {
|
|
Locale currentLocale = LocaleContextHolder.getLocale();
|
|
String localizedErrorMessage = messageSource.getMessage(fieldError, currentLocale);
|
|
|
|
if (localizedErrorMessage.equals(fieldError.getDefaultMessage())) {
|
|
String[] fieldErrorCodes = fieldError.getCodes();
|
|
localizedErrorMessage = fieldErrorCodes[0];
|
|
}
|
|
|
|
return localizedErrorMessage;
|
|
}
|
|
}
|