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

com.github.saphyra.exceptionhandling.DefaultExceptionHandler Maven / Gradle / Ivy

package com.github.saphyra.exceptionhandling;

import com.github.saphyra.exceptionhandling.domain.ErrorMessage;
import com.github.saphyra.exceptionhandling.domain.ErrorResponse;
import com.github.saphyra.exceptionhandling.exception.RestException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectFactory;
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 java.util.Optional;

@ControllerAdvice
@Slf4j
@RequiredArgsConstructor
public class DefaultExceptionHandler {
    private final Optional errorTranslationAdapter;

    @ExceptionHandler(RestException.class)
    public ResponseEntity handleRestException(RestException ex) {
        log.warn("{} - {}", ex.getMessage(), ex.getErrorMessage(), ex);
        ErrorMessage errorMessage = ex.getErrorMessage();

        String localizedMessage = null;
        if (errorTranslationAdapter.isPresent()) {
            localizedMessage = errorTranslationAdapter.get().translateMessage(errorMessage.getErrorCode(), errorMessage.getParams());
        }

        ErrorResponse errorResponse = ErrorResponse.builder()
            .httpStatus(ex.getResponseStatus().value())
            .errorCode(errorMessage.getErrorCode())
            .localizedMessage(localizedMessage)
            .params(errorMessage.getParams())
            .build();

        return new ResponseEntity<>(errorResponse, ex.getResponseStatus());
    }

    @ExceptionHandler(value = RuntimeException.class)
    public ResponseEntity handleUnchecked(RuntimeException ex) {
        log.error("Internal Server Error: {}. Message: {}", ex.getClass().getName(), ex.getMessage());
        ex.printStackTrace();
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(value = Throwable.class)
    public ResponseEntity handleAll(Throwable ex) {
        log.error("Unknown Server Error: {}. Message: {}", ex.getClass().getName(), ex.getMessage());
        ex.printStackTrace();
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy