首页 > 解决方案 > 在 spring v5 REST 应用程序的浏览器中未找到 GUI 文件,而不使用任何 xml 文件

问题描述

我创建了一个 Spring 5.x REST 应用程序用于学习目的,我不使用 web.xml 或 spring-config xml 文件之类的 xml 文件。在这个应用程序中,有控制器和 GUI 文件。我的问题是,使用下面的容器初始化代码,我可以从浏览器访问 GUI 页面或控制器,但不能同时访问两者。

案例 1: 在覆盖方法 getServletMappings() 中,如果我们传递字符串“/”,我的 REST 控制器方法将被正确调用,但 GUI 页面(index.html)显示为“未找到”。

案例 2: 在覆盖方法 getServletMappings() 中,如果我们将传递字符串“/rest”,我的控制器方法将作为“未找到”并且 GUI 页面(index.html)是可访问的。

我认为我们在 web.xml 文件的情况下也使用相同的概念。我们只需在 servlet 映射中编写“/rest”,将包含“/rest”字符串的 URL 传递给 dispatcherServelet,如果该 URL 不包含它,则将用于 GUI 页面。但我不知道在这里实现同样的事情。

public class SpringMvcInitializer 
extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { SecurityConfig.class, DbConfiguration.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/rest" };
    }

}

请帮助我。谢谢!

标签: springjakarta-eedispatcherspring-restcontroller

解决方案


根据我的理解,我试图使用“/rest”而不是“/”,这是getServletMappings()中控制器的类级requestMapping。因此,不包含“rest”的 url 将不会通过 dispatcherServlet 并为 UI 页面提供请求,并且包含“/rest”的 URL 将被映射到控制器方法。但它没有用。经过多次尝试,我终于得到了解决方案:我尝试的是,我为传入的 URL 创建了一个前缀。并在 getServletMappings() 方法中使用此前缀字符串。现在,如果我将尝试使用 URL 中的此前缀字符串访问控制器资源,它将正常工作,并且如果我将使用 UI 页面的 URL 而不使用前缀字符串,它也可以正常工作。

-> 在 URL 中添加前缀的方法:

在资源文件夹中添加 application.properties 文件,其中“/api/*”是前缀字符串。

  server.contextPath=/api/*

->现在,如果我们有一个用于控制器的 URL “http:localhost:8080/project_name/register_api”,那么这个 URL 将变为:
http://localhost:8080/project_name/api/register_api

-> UI 页面 index.html 的 URL 通常如下所示: http://localhost:8080/project_name/index.html


推荐阅读