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

de.digitalcollections.commons.springmvc.controller.GlobalExceptionController Maven / Gradle / Ivy

package de.digitalcollections.commons.springmvc.controller;

import de.digitalcollections.commons.springmvc.exceptions.ResourceNotFoundException;
import java.sql.Timestamp;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
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.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;

/**
 * Global exception handling.
 */
@ControllerAdvice
public class GlobalExceptionController implements EnvironmentAware {

  private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionController.class);
  private String activeProfile;

  @Override
  public void setEnvironment(Environment environment) {
    String[] activeProfiles = environment.getActiveProfiles();
    if (activeProfiles.length == 1) {
      activeProfile = activeProfiles[0];
    }
  }

  @ExceptionHandler(ResourceNotFoundException.class)
  @ResponseStatus(HttpStatus.NOT_FOUND)
  public ModelAndView handleResourceNotFoundException(Exception ex) {
    ModelAndView model = new ModelAndView("error");
    model.addObject("timestamp", new Timestamp(new Date().getTime()));
    model.addObject("errorCode", "404");

    return model;
  }

  @ExceptionHandler(value = {Exception.class})
  @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
  public ModelAndView handleAllException(Exception ex) {
    LOGGER.error("Internal Error", ex);
    ModelAndView model = new ModelAndView("error");
    model.addObject("timestamp", new Timestamp(new Date().getTime()));
    model.addObject("errorCode", "500");
    // if application is not running in production, we can add stacktrace for further information
    if (!"PROD".equals(activeProfile)) {
      model.addObject("exception", ex);
    }
    return model;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy