package org.weiboad.ragnar.server.controller.web; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.web.ErrorAttributes; import org.springframework.boot.autoconfigure.web.ErrorController; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; @Controller public class ErrorPage implements ErrorController { private static final String PATH = "/error"; @Autowired private ErrorAttributes errorAttributes; @Value("${spring.profiles.active}") private String active; Logger log = LoggerFactory.getLogger(ErrorPage.class); @RequestMapping(value = PATH) public String error(Model model, HttpServletRequest request, HttpServletResponse response) { //return new ErrorJson(response.getStatus(), getErrorAttributes(request, debug)); Map<String, Object> mapobj = getErrorAttributes(request, isDebug()); model.addAttribute("status", response.getStatus()); model.addAttribute("error", (String) mapobj.get("error")); model.addAttribute("trace", (String) mapobj.get("trace")); model.addAttribute("msg", (String) getErrorAttributes(request, true).get("message")); return "errorpage"; } public boolean isDebug() { if (this.active.equalsIgnoreCase("dev")) { return true; } return false; } @Override public String getErrorPath() { return PATH; } private Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) { RequestAttributes requestAttributes = new ServletRequestAttributes(request); return errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace); } }