content: package cn.abel.rest.exception;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.springframework.boot.autoconfigure.web.ServerProperties;
  import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
  import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
  import org.springframework.http.HttpStatus;
  import org.springframework.http.MediaType;
  import org.springframework.http.ResponseEntity;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.servlet.ModelAndView;
  
  /**
   * 404 覆盖默认error处理方法（不设置则在根目录查找error页面）
   *
   */
  @Controller
  public class DefaultErrorController extends BasicErrorController {
  
      public DefaultErrorController(ServerProperties serverProperties) {
          super(new DefaultErrorAttributes(), serverProperties.getError());
      }
  
      /**
       * 覆盖默认的Json响应
       */
      @Override
      public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
          Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
          HttpStatus status = getStatus(request);
  
          //输出自定义的Json格式
          Map<String, Object> map = new HashMap<>(2);
          map.put("status", false);
          map.put("msg", body.get("message"));
  
          return new ResponseEntity<>(map, status);
      }
  
      /**
       * 覆盖默认的HTML响应
       */
      @Override
      public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
          //请求的状态
          HttpStatus status = getStatus(request);
          response.setStatus(getStatus(request).value());
  
          Map<String, Object> model = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML));
          ModelAndView modelAndView = resolveErrorView(request, response, status, model);
          //指定自定义的视图
          return (modelAndView == null ? new ModelAndView("error/error", model) : modelAndView);
      }
  }