From dfa2ca4bffcfef5f9bca222319e97a6038920cb4 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Tue, 25 Apr 2017 17:46:45 +0200 Subject: [PATCH] Fix exception handling Exeption handling was broken by 56fe085e705f9c826cc2501f9c2859469c0a65c3 (GH-27). --- ...e.java => ControllerExceptionHandler.java} | 18 ++-------- .../controller/DefaultExceptionHandler.java | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 16 deletions(-) rename src/main/java/de/thm/arsnova/controller/{SecurityExceptionControllerAdvice.java => ControllerExceptionHandler.java} (90%) create mode 100644 src/main/java/de/thm/arsnova/controller/DefaultExceptionHandler.java diff --git a/src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java b/src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java similarity index 90% rename from src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java rename to src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java index 48111c53..6a8d22a4 100644 --- a/src/main/java/de/thm/arsnova/controller/SecurityExceptionControllerAdvice.java +++ b/src/main/java/de/thm/arsnova/controller/ControllerExceptionHandler.java @@ -41,24 +41,10 @@ import java.util.HashMap; import java.util.Map; /** - * Translates security/authentication related exceptions into HTTP status codes. + * Translates exceptions into HTTP status codes. */ @ControllerAdvice -public class SecurityExceptionControllerAdvice { - - @ExceptionHandler - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public Map<String, String> defaultExceptionHandler( - final Exception e, - final HttpServletRequest req - ) { - final Map<String, String> result = new HashMap<>(); - result.put("code", "500"); - result.put("status", "Internal server error"); - result.put("message", e.getMessage()); - return result; - } - +public class ControllerExceptionHandler { @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(NotFoundException.class) public void handleNotFoundException(final Exception e, final HttpServletRequest request) { diff --git a/src/main/java/de/thm/arsnova/controller/DefaultExceptionHandler.java b/src/main/java/de/thm/arsnova/controller/DefaultExceptionHandler.java new file mode 100644 index 00000000..ba76e18e --- /dev/null +++ b/src/main/java/de/thm/arsnova/controller/DefaultExceptionHandler.java @@ -0,0 +1,36 @@ +package de.thm.arsnova.controller; + +import org.springframework.core.annotation.AnnotationUtils; +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.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@ControllerAdvice +public class DefaultExceptionHandler { + @ExceptionHandler + @ResponseBody + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public Map<String, String> defaultExceptionHandler( + final Exception e, + final HttpServletRequest req + ) throws Exception { + /* If the exception is annotated with @ResponseStatus rethrow it and let + * the framework handle it. + * See https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc. */ + if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) { + throw e; + } + final Map<String, String> result = new HashMap<>(); + result.put("code", "500"); + result.put("status", "Internal server error"); + result.put("message", e.getMessage()); + + return result; + } +} -- GitLab