Created
December 19, 2016 08:14
-
-
Save yevgnenll/dbdb5a52998426fb37fb1879eeb4f801 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.yevgnenll.controller; | |
import java.util.Map; | |
import javax.servlet.http.HttpServletRequest; | |
import org.springframework.boot.autoconfigure.web.ErrorAttributes; | |
import org.springframework.http.HttpStatus; | |
import org.springframework.http.ResponseEntity; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.ResponseBody; | |
import org.springframework.web.context.request.RequestAttributes; | |
import org.springframework.web.context.request.ServletRequestAttributes; | |
import org.springframework.web.servlet.ModelAndView; | |
@Controller | |
public class AppErrorController implements org.springframework.boot.autoconfigure.web.ErrorController { | |
private ErrorAttributes errorAttributes; | |
private final static String ERROR_PATH = "/error"; | |
public AppErrorController(ErrorAttributes errorAttributes) { | |
this.errorAttributes = errorAttributes; | |
} | |
@RequestMapping(value = ERROR_PATH, produces = "text/html") | |
public ModelAndView errorHtml(HttpServletRequest request) { | |
return new ModelAndView("/error/error", getErrorAttributes(request, false)); | |
} | |
@RequestMapping(value = ERROR_PATH) | |
@ResponseBody | |
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { | |
Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request)); | |
HttpStatus status = getStatus(request); | |
return new ResponseEntity<Map<String, Object>>(body, status); | |
} | |
@Override | |
public String getErrorPath() { | |
return ERROR_PATH; | |
} | |
private boolean getTraceParameter(HttpServletRequest request) { | |
String parameter = request.getParameter("trace"); | |
if(parameter == null) { | |
return false; | |
} | |
return !"false".equals(parameter.toLowerCase()); | |
} | |
private Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) { | |
RequestAttributes requestAttributes = new ServletRequestAttributes(request); | |
return this.errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace); | |
} | |
private HttpStatus getStatus(HttpServletRequest request) { | |
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); | |
if(statusCode != null) { | |
try { | |
return HttpStatus.valueOf(statusCode); | |
} catch (Exception ex) { | |
} | |
} | |
return HttpStatus.INTERNAL_SERVER_ERROR; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment