Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用两个URL映射_Java_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Java 如何使用两个URL映射

Java 如何使用两个URL映射,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我想将我的应用程序迁移到SpringBootJAR部署。它目前使用Spring4而不启动 我在/API/*上有一个REST-API监听,在src/main/webapp上有一个Javascript前端,可以在/*上访问 现在我找不到一个方法在靴子里做同样的事情 通过更改server.context path属性,我成功地让api在/api/*上监听,但我没有注册第二个servlet来为/*上的js前端服务。我知道jar部署不支持src/main/webapp,我还知道Spring Boot提供来

我想将我的应用程序迁移到SpringBootJAR部署。它目前使用Spring4而不启动

我在
/API/*
上有一个REST-API监听,在
src/main/webapp
上有一个Javascript前端,可以在
/*
上访问

现在我找不到一个方法在靴子里做同样的事情

通过更改
server.context path
属性,我成功地让api在
/api/*
上监听,但我没有注册第二个servlet来为
/*
上的js前端服务。我知道jar部署不支持
src/main/webapp
,我还知道Spring Boot提供来自
src/resources/public
src/resources/static
的静态文件。但是在我的例子中,这些文件夹也指向
/api/*
,因为
server.context路径发生了变化

我尝试将另一个servlet注册为bean。这破坏了我的api端点


实现这一点的最佳方法是什么?

第一个选项-将所有内容从
src/main/webapp
复制到
src/resources/static
。这就是SpringBoot查找静态内容的地方

第二个选项,继续使用
src/main/webapp
,但将构建配置为将静态资源复制到
target/classes/static
。我在前面的回答中为此提供了Maven配置:


请注意,如果使用第一个选项,如果希望修改内容并在不运行构建的情况下自动重新加载内容,则需要在IDE中运行应用程序。如果您正在执行jar,那么使用第二个选项可以让您像Tomcat一样重新加载静态内容,但是可能会导致一些混乱。就我个人而言,我大部分时间都使用第二个选项,因为我喜欢在命令行上运行应用程序,并使用Chrome开发工具编辑我的HTML和JavaScript。

对于多个映射,您必须为每个映射添加一个映射,并在控制器中映射,如下所示

 @Controller
 @RequestMapping(value = { "${url.mapping}","${url.mapping.two}" })
 public class CustomerController{

我知道这个解决方案,但问题是我将默认servlet映射到
/api/*
。因此,
src/resources/static
下的所有内容都将映射到
/api/*
。但是我希望它被映射到
/*
。如果您想要映射到
/*
,那么您需要删除到
/api/*
的servlet上下文映射,并且一切都应该正常。您的REST控制器应该定义它们自己到
/api/任何东西的映射,但正因为如此,我尝试注册第二个servlet。如果从
/web/*
开始也可以。但是,在每个控制器前面加上
api
听起来不是很干净。在这种情况下,可能需要重新编写您的问题,以明确这正是您试图实现的目标。@DavidSchilling如果您的所有api端点都在一个控制器中,您可以添加一个类级别的
@RequestMapping(“/api/”)
将作为所有方法级别的前缀
@RequestMapping
s。