1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.audit.service.controller;
18
19 import org.apache.logging.log4j.LogManager;
20 import org.apache.logging.log4j.Logger;
21 import org.springframework.data.rest.webmvc.support.ExceptionMessage;
22 import org.springframework.http.HttpHeaders;
23 import org.springframework.http.HttpStatus;
24 import org.springframework.http.ResponseEntity;
25 import org.springframework.web.bind.annotation.ControllerAdvice;
26 import org.springframework.web.bind.annotation.ExceptionHandler;
27 import org.springframework.web.bind.annotation.ResponseBody;
28 import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
29
30 @ControllerAdvice
31 public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
32 private static final Logger LOGGER = LogManager.getLogger();
33
34 @ExceptionHandler({ Exception.class })
35 @ResponseBody
36 public ResponseEntity<?> handleAnyException(Exception e) {
37 if (e instanceof IllegalArgumentException) {
38 return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
39 } else if (e instanceof IllegalStateException) {
40 return new ResponseEntity(e.getMessage(), HttpStatus.CONFLICT);
41 }
42 return errorResponse(e, HttpStatus.INTERNAL_SERVER_ERROR);
43 }
44
45 protected ResponseEntity<ExceptionMessage> errorResponse(Throwable throwable,
46 HttpStatus status) {
47 if (null != throwable) {
48 LOGGER.error("error caught: " + throwable.getMessage(), throwable);
49 return response(new ExceptionMessage(throwable), status);
50 } else {
51 LOGGER.error("unknown error caught in RESTController, {}", status);
52 return response(null, status);
53 }
54 }
55
56 protected <T> ResponseEntity<T> response(T body, HttpStatus status) {
57 LOGGER.debug("Responding with a status of {}", status);
58 return new ResponseEntity<>(body, new HttpHeaders(), status);
59 }
60 }