我有一个包含Angular 6应用程序的Maven模块,在构建时将其打包在一个jar中META-INF/resources/admin/ui。
META-INF/resources/admin/ui
我的Spring Boot 2应用程序对前端Maven模块具有依赖性,并且在构建时还包括前端库。但是,如果我访问http://localhost:8080/admin/ui/它会下载一个空的ui文件,但是如果我访问http://localhost:8080/admin/ui/index.html它就会显示Angular应用程序。
http://localhost:8080/admin/ui/
http://localhost:8080/admin/ui/index.html
如果我在打包前端应用程序,META- INF/resources/则http://localhost:8080/它将正确显示Angular应用程序,但是我希望前端应用程序的上下文从开始/admin/ui。Spring Boot应用程序没有任何自定义映射,只是带有注释
META- INF/resources/
http://localhost:8080/
/admin/ui
@Configuration @EnableAutoConfiguration @EnableScheduling @ComponentScan(basePackageClasses = {...}) @Import({...})
我是否缺少配置属性?
感谢您的帮助。
您并不需要所有这些注释才能使其正常工作。我建议您删除那些不是您故意添加的注释。
为了在与主上下文不同的路径上提供静态页面,这里是一种解决方法。
创建另一个简单的控制器类,如下所示。
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class Home { @RequestMapping(path = "/") public String getHome(){ return "redirect:/admin/ui/"; // make sure no space between colon (:) and endpoint name (/admin/ui) } @RequestMapping(path = "/admin/ui/" ) public String getAdminUi(){ return "/index.html"; // your index.html built by angular should be in resources/static folder // if it is in resources/static/dist/index.html, // change the return statement to "/dist/index.html" } }
并且,请注意,我已经将该类标记为@Controller不是,@RestController因此如果您将其标记为@RestController或尝试在任何现有的类中进行相同的标记,@RestController您将很难轻松实现。因此,创建上面的另一个类没有害处。
@Controller
@RestController
这种方法的好处是,它不会破坏您现有的映射。上下文上下文路径也不会更改,因此无需理会其他端点路径。他们都应该像以前一样工作。
希望这有所帮助!