我有一个包含Angular 6应用程序的Maven模块,并在构建时将其包装在META-INF/resources/admin/ui
的jar中。
我的Spring Boot 2应用程序对前端Maven模块具有依赖关系,并且在构建时还包括前端库。但是,如果我访问http://localhost:8080/admin/ui/
,它将下载一个空的ui文件,但是如果我访问http://localhost:8080/admin/ui/index.html
,则它将显示Angular应用程序。
如果我将前端应用程序打包在META-INF/resources/
处,那么http://localhost:8080/
将正确显示Angular应用程序,但是我希望前端应用程序的上下文从/admin/ui
开始。 Spring Boot应用程序没有任何自定义映射,只是使用
@Configuration
@EnableAutoConfiguration
@EnableScheduling
@ComponentScan(basePackageClasses = {...})
@Import({...})
我是否缺少配置属性?
感谢您的帮助。
答案 0 :(得分:2)
您并不需要所有这些注释才能使其正常工作...我建议您删除那些不是您故意添加的注释。
要在与主上下文不同的路径上提供静态页面,请采用以下解决方法:。
创建另一个简单的控制器类,如下所示。
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
或尝试在任何现有的{{1} }您不会轻易实现它。因此,创建像上面这样的另一个类也没有害处。
这种方式的好处是,它不会破坏您现有的映射。上下文上下文路径也不会更改,因此无需理会其他端点路径。它们都将像以前一样工作。
希望这对您有帮助!