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

Spring mvc捕捉所有路线,但只有未知路线

常经赋
2023-03-14

我有一个前端带有angular的spring boot应用程序。

我正在使用html5模式的ui路由器,我希望spring能够呈现相同的索引。所有未知路径上的html。

// Works great, but it also overrides all the resources
@RequestMapping
public String index() {
    return "index";
}

// Seems do be the same as above, but still overrides the resources
@RequestMapping("/**")
public String index() {
    return "index";
}

// Works well but not for subdirectories. since it doesn't map to those
@RequestMapping("/*")
public String index() {
    return "index";
}

所以我的问题是,我如何创建一个后备映射,但它允许通过资源?

共有3个答案

王刚毅
2023-03-14

您可以在404处理程序中处理所有不匹配的请求。看看这个,有几个选项

您可以做的另一件事是重写DefaultAnnotationHandlerMapping,并通过设置defaultHandler属性来添加一种“一网打尽”的控制器。

公共空setDefaultHandler(Object defaultHandler)
设置此处理程序映射的默认处理程序。如果没有找到特定的映射,将返回此处理程序。默认为null,表示没有默认处理程序。

易嘉胜
2023-03-14

网站中的所有URL定义一个入口点。xml文件,如下所示:

<error-page> 
    <error-code>404</error-code>
    <location>/Error_404</location>
</error-page>

这将捕获所有404,即页面未找到错误,并抛出/Error_404url,在控制器中捕获并推送到所需位置。

朱运诚
2023-03-14

我找到的最简单的方法是实现一个定制的404页面。

@Configuration
public class MvcConfig {

    @Bean
    public EmbeddedServletContainerCustomizer notFoundCustomizer(){
        return new NotFoundIndexTemplate();
    }

    private static class NotFoundIndexTemplate implements EmbeddedServletContainerCustomizer {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/"));
        }
    }
}

Neil McGuigan提出了一个HandlerInterceptor,但我不明白该如何实现。我不太想知道该如何实现,因为使用html5历史推送状态的单页应用程序会想要这种行为。我还没有找到解决这个问题的最佳实践。

 类似资料:
  • 指的是指数的Spring综合路线。html,我正在尝试使用regex来捕获所有路由。但我得到了一个错误: 标记错误:java.util.regex.模式语法异常,在索引2处悬挂元字符“*” 当我通过修复这个问题时,我的正则表达式无法捕捉路由。 要求就同样的问题提供指导。

  • 我想开发一个注销按钮,将我发送到登录路径,并从导航器中删除所有其他路径。文档似乎没有解释如何创建路由预测(RoutePredicate)或具有任何类型的removeAll功能。

  • 问题内容: 我正在为基于React的单页应用程序开发spring后端,在其中我使用React-Router进行客户端路由。 在index.html页面旁边,后端在路径上提供数据。 为了在我的应用程序的根路径上提供index.html,我添加了一个资源处理程序 我想要的是在没有其他路由匹配时(例如,当我调用以外的路径时)提供index.html页。 在spring如何配置这种全包式路线? 问题答案:

  • 问题内容: 我目前正在编写一个API,它将要求用户在每个请求的标头中传递身份验证令牌。现在我知道我可以创建一条综合路线了 但我想知道如何使它排除某些路线,例如或? 问题答案: 我不确定用户访问或时要发生什么,但是您可以为它们创建单独的路由;如果您在全部接收之前声明它们,则它们在处理传入请求时会首先遇到麻烦:

  • 问题内容: 我有一个前缀要添加到每条路线。现在,我在每个定义处都向路线添加了一个常量。有没有一种方法可以自动执行此操作? 问题答案: 答案取决于你如何为该应用程序提供服务。 安装在另一个WSGI容器中 假设你将在WSGI容器(mod_wsgi,uwsgi,gunicorn等)中运行此应用程序;你实际上需要将该应用程序作为该WSGI容器的子部分挂载在该前缀处(任何讲WSGI的东西都可以使用),并将A

  • 编辑:我已经用symfony设置了登录表单,授权工作正常。但是我想更深入地了解一下symfony的安全包是如何管理它的。 我想学习/了解Symfony安全处理认证的方式。如果我理解得很好,到目前为止,在Symfony中触发认证check_path行security.yml中指定的URL"/login_path": 然后控制器/监听器/服务通过变量POST[_username]和POST[_pass