Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Maven Web API';当包是WAR时,Spring引导不会自动映射s(servlet)_Maven_Spring Boot - Fatal编程技术网

Maven Web API';当包是WAR时,Spring引导不会自动映射s(servlet)

Maven Web API';当包是WAR时,Spring引导不会自动映射s(servlet),maven,spring-boot,Maven,Spring Boot,这有点复杂,所以我将尝试一步一步地解释它 我构建了一个Maven/SpringWeb框架,理论上可以被任何其他项目使用。xml包的类型为JAR。这实际上包含两个web过滤器和一些基本身份验证代码,这些代码映射到“/auth/basic”(POST),并接受“username”和“password”JSON文档 我可以使用Maven成功地构建这个项目,甚至可以“spring boot:run”它,从而自动映射我的“/auth/basic”。使用CURL,我可以从命令行查询我的web API。每件事

这有点复杂,所以我将尝试一步一步地解释它

我构建了一个Maven/SpringWeb框架,理论上可以被任何其他项目使用。xml包的类型为JAR。这实际上包含两个web过滤器和一些基本身份验证代码,这些代码映射到“/auth/basic”(POST),并接受“username”和“password”JSON文档

我可以使用Maven成功地构建这个项目,甚至可以“spring boot:run”它,从而自动映射我的“/auth/basic”。使用CURL,我可以从命令行查询我的web API。每件事都很有魅力

我的第二个Maven/Spring项目是另一个JAR。但这一个有特定的“域”web API和代码。您可以创建、添加和删除用户。这也可以很好地编译,当通过“springboot:run”执行时,我可以从命令行使用CURL成功地查询我的web API。用户被创建、删除等

我的主要问题是下一部分。我想有第三个项目,但这一次,它打算是一个战争包。上面的两个JAR被列为此项目的依赖项。它们成功地打包到我的WAR文件中。本项目的目的是将所有html、css、javascript和图像文件作为本项目的一部分。我不希望这里有任何Java代码(Spring Boot主类除外)

当我用“spring boot:run”启动它时,它会成功启动,我可以从浏览器查看我的网页。我可以成功地导航(使用Angular)。我的主要问题是,当从JavaScript调用上述任何web API(即:“/auth/basic”或“/user/*”)时,我会得到一个HTTP 405。这是很明显的,因为没有任何web API像我在Spring引导另外两个JAR时那样自动映射

我的问题是为什么会这样?为什么当它是一个罐子的时候,自动找到我所有的控制器并映射它们足够聪明,但是当它是一场战争的时候,它却不能做同样的事情


我真的不想手动将servlet/过滤器添加到“web.xml”文件中。还有别的办法吗?Spring“automagic”方式?

因为在一场战争中,您将包括2个Spring靴罐。Spring引导jar不打算用作依赖项,而是独立使用。如果您想将它们作为依赖项包含到另一个项目中,您需要一个非基于spring boot的jar,方法是将spring boot从图片中删除,或者让spring boot构建2个工件。@M.Deinum,这是我的最终目标,将所有内容导出到WAR中,并在独立的Tomcat服务器中运行它。但我仍然不确定映射将如何完成?据我所知,Spring有一个Servlet,它将自动找到的RestController注释发送给它,并映射到RequestMapping(“/domain”)注释。你有什么想法可以告诉我吗?谢谢,我很感激。请注意,我找到的最接近的东西是这一节文献,它简要说明了该做什么,但没有解释独立的Tomcat服务器如何自动映射我的所有“RequestMapping(“/sample”)”注释?再次注意,就像每个例子一样,控制器在包中,而不是像我的例子那样在一个单独的JAR文件中。控制器或组件在哪里并不重要。正如我在第一篇评论中所说,这里的问题是,您将2个基于spring引导的应用程序作为jar作为依赖项。由于这些jar文件的结构,这永远不会起作用。如前所述,您需要在应用程序中打包非spring启动应用程序JAR。然后一切都在类路径上,映射(如果包被扫描!)将完成。@M.Deinum,如果我听起来有点怀疑,我很抱歉,但我只是不明白Spring如何被认为是专业的和“商业级”的,有这样的限制。我完全被这件事弄糊涂了。但这可以解释为什么我找不到关于这个主题的文献。谢谢你的回答。因为你在一场战争中加入了2个弹簧靴罐。Spring引导jar不打算用作依赖项,而是独立使用。如果您想将它们作为依赖项包含到另一个项目中,您需要一个非基于spring boot的jar,方法是将spring boot从图片中删除,或者让spring boot构建2个工件。@M.Deinum,这是我的最终目标,将所有内容导出到WAR中,并在独立的Tomcat服务器中运行它。但我仍然不确定映射将如何完成?据我所知,Spring有一个Servlet,它将自动找到的RestController注释发送给它,并映射到RequestMapping(“/domain”)注释。你有什么想法可以告诉我吗?谢谢,我很感激。请注意,我找到的最接近的东西是这一节文献,它简要说明了该做什么,但没有解释独立的Tomcat服务器如何自动映射我的所有“RequestMapping(“/sample”)”注释?再次注意,就像每个例子一样,控制器在包中,而不是像我的例子那样在一个单独的JAR文件中。控制器或组件在哪里并不重要。正如我在第一篇评论中所说,这里的问题是,您将2个基于spring引导的应用程序作为jar作为依赖项。由于这些jar文件的结构,这永远不会起作用。如前所述,您需要在应用程序中打包非spring启动应用程序JAR。然后一切都在类路径上,映射(如果包被扫描!)将完成。@M.Deinum,如果我听起来有点怀疑,我很抱歉,但我只是不明白Spring如何被认为是专业的和“商业级”的,有这样的限制。我完全被这件事弄糊涂了。但这可以解释为什么我找不到关于这个主题的文献。谢谢你的回答。