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

用于404状态和url模式的Spring controller异常处理

刘承运
2023-03-14

是否可以处理特定url模式的404状态?我想显示登录页面,如果有人去'localhost:8080/login/other'但没有请求映射'login/other'。Controller类如下所示:

@RequestMapping("/login")
@Controller
public class UserManagerController {

    @RequestMapping({"/", ""})
    public String getLoginPage() {
        return "login.html";
    }

}

我无法添加“/login/**”,因为它与我静态内容匹配,而对js或css的任何请求都与endpoint匹配。HTML示例:

<!DOCTYPE html>
<html lang="en">
  <head>
    ...
</head>
    ...
  <script src="/login/some.js"</script>
</html>

共有1个答案

黎奇略
2023-03-14

您可以使用如下内容:

import java.util.Objects;
import javax.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class GlobalErrorController implements ErrorController {

  @RequestMapping("/error")
  public String handleError(HttpServletRequest request, Model model) {
    Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
    Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
    model.addAttribute("errorMessage", exception);
    model.addAttribute("statusCode", statusCode);
    if (Objects.nonNull(statusCode)
        && HttpStatus.NOT_FOUND.value() == statusCode) {
      return "resource-not-found";// in your case you should use: return "redirect:/login";
    }
    return "exception";
  }

  @Override
  public String getErrorPath() {
    return "/error";
  }
}

如果用户将打开无效url(例如localhost:8080/invalid-page),则该代码将打开“resource-not-found”页面

对于您的情况,可以使用'handle error()'方法返回“redirect:/login”;如果statusCode是404

 类似资料:
  • 问题内容: 这是一种常见的模式,我看到与异常关联的错误代码存储为静态最终整数。当创建要抛出的异常时,将使用这些代码之一以及错误消息来构造该异常。这导致该方法要抓住它,必须先查看代码,然后决定采取的措施。 替代方法似乎是-为每个异常错误情况声明一个类(尽管相关的异常会从通用基类中删除) 有中间立场吗?推荐的方法是什么? 问题答案: 这是一个很好的问题。我相信绝对有中间立场。 我认为错误代码对于显示质

  • 前言 在 gRPC 的新版本(1.0.0-pre2)中,为了方便传递 debug 信息,在 StatusException 和 StatusRuntimeException 中增加了名为 Trailer 的 Metadata。 注: 在此之前,Status(和Status映射的StatusException)只有两个字段可以传递信息:1. status code 2. status decript

  • 我有一个ControllerAdvice类,它处理一组异常。我们还有其他一些例外情况,这些例外情况用注释进行了注释。为了结合这两种方法,我们使用博客文章中描述的技术:http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc,即在ControllerAdvice中,我们以以下方式处理一般异常: 它就像一个符咒,但是,使用此技术

  • 本文向大家介绍c# 基于任务的异步编程模式(TAP)的异常处理,包括了c# 基于任务的异步编程模式(TAP)的异常处理的使用技巧和注意事项,需要的朋友参考一下 在前面讲到了《基于任务的异步编程模式(TAP)》,但是如果调用异步方法,没有等待,那么调用异步方法的线程中使用传统的try/catch块是不能捕获到异步方法中的异常。因为在异步方法执行出现异常之前,已经执行完毕。 1、没有等待的调用异步方法

  • 我在应用程序中访问房间DAOs时遇到问题。即使我通过rxjava在后台线程中执行操作,也会出现此错误:

  • 我试图添加一个新的块到游戏中,每边都有不同的纹理,它会抛出一个错误异常加载模型的变体。 我有其他具有类似命名约定的块,这些块工作正常,但在所有方面都具有相同的纹理。 游戏中的方块正确显示了“燃烧”和“朝向”状态,但没有显示纹理。