spring - 在 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" };
}
}
请帮助我。谢谢!
解决方案
根据我的理解,我试图使用“/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 ”
推荐阅读
- css - 如何使用 CSS Grid 和/或/不使用 Flexbox 制作自适应响应式灵活标题?
- arrays - 根据数组的值和另一个数组的值更新数组
- php - 使用 ajax 的 wordpress 更新 postmeta 不起作用
- javascript - 在 JS 对象中。为什么原型和构造函数总是相互嵌套
- c# - 动态保存文件 .net core
- sed - 得到一切直到美元符号,但如果没有美元符号存在
- python - Beautiful Soup 将 < 替换为 <
- python - 如何将while函数附加到列表中?
- oauth-2.0 - 如何在 Keycloak 中指定刷新令牌的生命周期
- oracle - ORA-02291: 插入多行时找不到父键