/**
* web错误 全局配置
* Created by 瓦力.
*/
@Controller
public class AppErrorController implements ErrorController {
private static final String ERROR_PATH = "/error";
private ErrorAttributes errorAttributes;
@Override
public String getErrorPath() {
return ERROR_PATH;
}
@Autowired
public AppErrorController(ErrorAttributes errorAttributes) {
this.errorAttributes = errorAttributes;
}
/**
* Web页面错误处理
*/
@RequestMapping(value = ERROR_PATH, produces = "text/html")
public String errorPageHandler(HttpServletRequest request, HttpServletResponse response) {
int status = response.getStatus();
switch (status) {
case 403:
return "403";
case 404:
return "404";
case 500:
return "500";
}
return "index";
}
/**
* 除Web页面外的错误处理,比如Json/XML等
*/
@RequestMapping(value = ERROR_PATH)
@ResponseBody
public ApiResponse errorApiHandler(HttpServletRequest request) {
RequestAttributes requestAttributes = new ServletRequestAttributes(request);
Map<String, Object> attr = this.errorAttributes.getErrorAttributes(requestAttributes, false);
int status = getStatus(request);
return ApiResponse.ofMessage(status, String.valueOf(attr.getOrDefault("message", "error")));
}
private int getStatus(HttpServletRequest request) {
Integer status = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (status != null) {
return status;
}
return 500;
}
}