package eu.eudat.controllers.controllerhandler; import eu.eudat.core.logger.Logger; import eu.eudat.core.models.exception.ApiExceptionLoggingModel; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; 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 types.LoggingType; import javax.annotation.Priority; import java.util.HashMap; import java.util.Map; /** * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice @Priority(5) public class ControllerErrorHandler { private Logger logger; @Autowired public ControllerErrorHandler(Logger logger) { this.logger = logger; } @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public ResponseItem processValidationError(Principal principal, Exception ex) throws Exception { ApiExceptionLoggingModel apiExceptionLoggingModel = new ApiExceptionLoggingModel<>(); apiExceptionLoggingModel.setCode(HttpStatus.BAD_REQUEST); apiExceptionLoggingModel.setUser(principal); Map exceptionMap = new HashMap<>(); exceptionMap.put("exception", ex); apiExceptionLoggingModel.setData(exceptionMap); apiExceptionLoggingModel.setMessage(ex.getMessage()); apiExceptionLoggingModel.setType(LoggingType.ERROR); ex.printStackTrace(); this.logger.error(apiExceptionLoggingModel); return new ResponseItem().message(ex.getMessage()).status(ApiMessageCode.DEFAULT_ERROR_MESSAGE); } }