GUI 文件在不使用任何 xml 文件的情况下,在 Spring v5 REST 应用程序中的浏览器中找不到



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

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

CASE-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" };
}
}

请帮我解决这个问题。谢谢!

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

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

在资源文件夹中添加应用程序属性文件,其中包含"/api/*"为前缀字符串的内容。

server.contextPath=/api/*

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

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

最新更新