当前位置: 首页 > 知识库问答 >
问题:

如何创建错误处理程序(404,500...)在Spring Boot/MVC中

谷梁昊空
2023-03-14

几个小时以来,我试图在Spring Boot/MVC中创建一个自定义的全局错误处理程序。我读了很多文章,什么也没读。

这就是我的错误类:

我试着创建一个这样的类

@Controller
public class ErrorPagesController {

    @RequestMapping("/404")
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String notFound() {
        return "/error/404";
    }

    @RequestMapping("/403")
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public String forbidden() {
        return "/error/403";
    }

    @RequestMapping("/500")
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public String internalServerError() {
        return "/error/500";
    }

}

共有1个答案

梁嘉澍
2023-03-14

除了@arash之外,您还可以添加一个新的BaseController类,可以对其进行扩展,处理从异常到HTTP响应的转换。

     import com.alexfrndz.pojo.ErrorResponse;
     import com.alexfrndz.pojo.Error;
     import com.alexfrndz.pojo.exceptions.NotFoundException;
     import org.springframework.http.HttpStatus;
     import org.springframework.http.ResponseEntity;
     import org.springframework.web.bind.annotation.ExceptionHandler;
     import org.springframework.web.bind.annotation.ResponseBody;
     import org.springframework.web.bind.annotation.ResponseStatus;

     import javax.persistence.NoResultException;
     import javax.servlet.http.HttpServletRequest;
     import java.util.List;

     @Slf4j
     public class BaseController {

    @ExceptionHandler(NoResultException.class)
    public ResponseEntity<Exception> handleNoResultException(
            NoResultException nre) {
        log.error("> handleNoResultException");
        log.error("- NoResultException: ", nre);
        log.error("< handleNoResultException");
        return new ResponseEntity<Exception>(HttpStatus.NOT_FOUND);
    }


    @ExceptionHandler(Exception.class)
    public ResponseEntity<Exception> handleException(Exception e) {
        log.error("> handleException");
        log.error("- Exception: ", e);
        log.error("< handleException");
        return new ResponseEntity<Exception>(e,
                HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(NotFoundException.class)
    @ResponseStatus(value = HttpStatus.NOT_FOUND)
    @ResponseBody
    public ErrorResponse handleNotFoundError(HttpServletRequest req, NotFoundException exception) {
        List<Error> errors = Lists.newArrayList();
        errors.add(new Error(String.valueOf(exception.getCode()), exception.getMessage()));
        return new ErrorResponse(errors);
    }
   }
 类似资料:
  • 问题内容: 我试图在Spring Boot / MVC中创建CUSTOM全局错误处理程序。我读了很多文章,什么都没有…:/请帮我。 我尝试创建这样 我用这种方式: ` 问题答案: 你可以尝试以下代码:

  • 我正在使用Express.js并尝试创建一个catchall异步错误处理程序。假设我有三条路都可能出错, 在这三条路由中,所有getXX函数都可能抛出错误。 我希望所有路由都只有一个异步处理程序。类似这样的东西 所以我不必尝试/捕捉每一个可能抛出错误的地方。对此有什么解决办法吗? 提前道谢!

  • 当我传递无效的json格式时,我得到了400个Http响应, 我想返回自定义的json消息而不是这样,有人能建议在Spring 4.1中该怎么办吗? 使用ControllerAdvision处理执行,但它不起作用。

  • 我正在应用程序中使用spring SimpleMappingExceptionResolver 我的错误处理程序也很简单 如何打印异常消息和异常堆栈跟踪(或电子邮件)在我的错误控制器? 提前致谢 更新 谢谢你的回复。我想在jsp和控制台中打印堆栈跟踪。我还想要访问ErrorController本身中对象,这样我就可以使用这些信息来发送日志(由于一些调用是基于ajax的(它们使用POST),Erro

  • 我正在尝试使用Dismissible()从交易列表和应用程序屏幕中删除其中一个交易。但我得到了错误 deletetx只是我的main.dart文件中的一个函数,它删除事务并更改状态。