All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.infusers.core.exception.GlobalExceptionHandler Maven / Gradle / Ivy

There is a newer version: 2025.03.0001
Show newest version
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