Newer
Older
K.Filippopolitis
committed
import hbp.mip.utils.Exceptions.ExperimentNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
kfilippopolitis
committed
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import java.util.Date;
@ControllerAdvice
kfilippopolitis
committed
public class ControllerExceptionHandler extends ResponseEntityExceptionHandler {
public record ErrorMessage (int statusCode, Date timestamp, String message, String description) {}
kfilippopolitis
committed
@ExceptionHandler(ExperimentNotFoundException.class)
public ResponseEntity<Object> handleExperimentNotFoundException(ExperimentNotFoundException ex, WebRequest request) {
kfilippopolitis
committed
HttpStatus.NOT_FOUND.value(),
new Date(),
ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(message, HttpStatus.NOT_FOUND);
}
kfilippopolitis
committed
@ExceptionHandler(BadRequestException.class)
public ResponseEntity<Object> handleBadRequestException(BadRequestException ex, WebRequest request) {
ErrorMessage message = new ErrorMessage(
HttpStatus.BAD_REQUEST.value(),
new Date(),
ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(message, HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(UnauthorizedException.class)
public ResponseEntity<Object> handleUnauthorizedException(UnauthorizedException ex, WebRequest request) {
ErrorMessage message = new ErrorMessage(
HttpStatus.UNAUTHORIZED.value(),
new Date(),
ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(message, HttpStatus.UNAUTHORIZED);
}
@ExceptionHandler(NoContent.class)
public ResponseEntity<ErrorMessage> handleNoContent(NoContent nc, WebRequest request) {
ErrorMessage message = new ErrorMessage(
HttpStatus.NO_CONTENT.value(),
new Date(),
nc.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(message, HttpStatus.NO_CONTENT);
}
@ExceptionHandler({InternalServerError.class, Exception.class})
public ResponseEntity<ErrorMessage> globalExceptionHandler(Exception ex, WebRequest request) {
logger.error("An unexpected exception occurred: " + ex.getClass() +
" Message: " + ex.getMessage() +
" Stacktrace: " + Arrays.toString(ex.getStackTrace())
ErrorMessage message = new ErrorMessage(
HttpStatus.INTERNAL_SERVER_ERROR.value(),
new Date(),
ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR);
}
}