argos/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java

65 lines
2.5 KiB
Java
Raw Normal View History

2017-12-23 16:56:05 +01:00
package eu.eudat.controllers.controllerhandler;
import eu.eudat.models.errormodels.ValidationErrorContext;
2018-05-14 08:44:35 +02:00
import eu.eudat.models.helpers.responses.ResponseItem;
import eu.eudat.types.ApiMessageCode;
2017-12-23 16:56:05 +01:00
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;
2018-02-01 10:08:06 +01:00
2017-12-23 16:56:05 +01:00
@ControllerAdvice
public class ControllerErrorHandler {
private MessageSource messageSource;
@Autowired
public ControllerErrorHandler(MessageSource messageSource) {
this.messageSource = messageSource;
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
2018-05-14 08:44:35 +02:00
public ResponseItem<ValidationErrorContext> processValidationError(MethodArgumentNotValidException ex) {
2017-12-23 16:56:05 +01:00
BindingResult result = ex.getBindingResult();
List<FieldError> fieldErrors = result.getFieldErrors();
return processFieldErrors(fieldErrors);
}
2018-05-14 08:44:35 +02:00
private ResponseItem<ValidationErrorContext> processFieldErrors(List<FieldError> fieldErrors) {
2017-12-23 16:56:05 +01:00
ValidationErrorContext dto = new ValidationErrorContext();
2018-02-16 11:34:02 +01:00
for (FieldError fieldError : fieldErrors) {
2017-12-23 16:56:05 +01:00
String localizedErrorMessage = resolveLocalizedErrorMessage(fieldError);
dto.addFieldError(fieldError.getField(), localizedErrorMessage);
}
2018-05-14 08:44:35 +02:00
return new ResponseItem<ValidationErrorContext>().status(ApiMessageCode.VALIDATION_MESSAGE).payload(dto);
2017-12-23 16:56:05 +01:00
}
private String resolveLocalizedErrorMessage(FieldError fieldError) {
2018-02-16 11:34:02 +01:00
Locale currentLocale = LocaleContextHolder.getLocale();
2017-12-23 16:56:05 +01:00
String localizedErrorMessage = messageSource.getMessage(fieldError, currentLocale);
if (localizedErrorMessage.equals(fieldError.getDefaultMessage())) {
String[] fieldErrorCodes = fieldError.getCodes();
localizedErrorMessage = fieldErrorCodes[0];
}
return localizedErrorMessage;
}
}