
com.infusers.core.exception.GlobalExceptionHandler Maven / Gradle / Ivy
package com.infusers.core.exception;
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.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
import com.infusers.core.exception.access.NoAccessException;
import com.infusers.core.exception.access.UsageLimitExceededException;
import com.infusers.core.exception.api.FileNotFoundException;
import com.infusers.core.exception.feature.FeatureNotSupportedException;
import com.infusers.core.exception.security.InfusersTokenExpiredException;
import com.infusers.core.exception.sim.OrderNotFoundException;
import com.infusers.core.exception.user.UserNotFoundException;
@ControllerAdvice
public class GlobalExceptionHandler {
// Handle known exceptions
@ExceptionHandler(OrderNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ResponseEntity handleOrderNotFoundException(OrderNotFoundException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(FeatureNotSupportedException.class)
@ResponseStatus(HttpStatus.NOT_IMPLEMENTED)
public ResponseEntity handleFeatureNotSupportedException(FeatureNotSupportedException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.NOT_IMPLEMENTED.value()), HttpStatus.NOT_IMPLEMENTED);
}
@ExceptionHandler(UsageLimitExceededException.class)
@ResponseStatus(HttpStatus.BANDWIDTH_LIMIT_EXCEEDED)
public ResponseEntity handleUsageLimitExceededException(UsageLimitExceededException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.BANDWIDTH_LIMIT_EXCEEDED.value()), HttpStatus.BANDWIDTH_LIMIT_EXCEEDED);
}
@ExceptionHandler(NoAccessException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public ResponseEntity handleNoAccessException(NoAccessException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.FORBIDDEN.value()), HttpStatus.FORBIDDEN);
}
@ExceptionHandler(InfusersTokenExpiredException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public ResponseEntity handleInfusersTokenExpiredException(InfusersTokenExpiredException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.FORBIDDEN.value()), HttpStatus.FORBIDDEN);
}
@ExceptionHandler(FileNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ResponseEntity handleFileNotFoundException(FileNotFoundException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ResponseEntity handleUserNotFoundException(UserNotFoundException ex) {
return new ResponseEntity<>(new ErrorResponse(ex.getMessage(), HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(AsyncRequestTimeoutException.class)
@ResponseStatus(HttpStatus.REQUEST_TIMEOUT)
public ResponseEntity handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex) {
return new ResponseEntity<>(new ErrorResponse("Request timed out: "+ex.getMessage(), HttpStatus.REQUEST_TIMEOUT.value()), HttpStatus.REQUEST_TIMEOUT);
}
// General exception handler
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ResponseEntity handleUnexpectedException(Exception ex) {
ErrorResponse errorResponse = new ErrorResponse("An unexpected error occurred. "+ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value());
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
public static class ErrorResponse {
private String message;
private int status;
// Constructor, getters, and setters
public ErrorResponse(String message, int status) {
this.message = message;
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy