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 弹簧靴&x2B;同一服务器上的Angular2_Java_Spring_Angular_Spring Boot - Fatal编程技术网

Java 弹簧靴&x2B;同一服务器上的Angular2

Java 弹簧靴&x2B;同一服务器上的Angular2,java,spring,angular,spring-boot,Java,Spring,Angular,Spring Boot,我成功地将Angular2应用程序与Spring Boot后端集成在一起,将编译后的JS资源放在a/ui子目录中。基本上一切正常,Angular2应用程序可以通过appname/UIURL访问 但是,我想知道是否有一种方法可以告诉Spring“通过”/ui路径的子级的URL,因为目前Spring会拦截每个以/ui/*为目标的请求,从而阻止Angular2路由器正确导航到/ui路径下的资源 目前,我的一个控制器中只有此映射: @RequestMapping(value = "/ui") publi

我成功地将Angular2应用程序与Spring Boot后端集成在一起,将编译后的JS资源放在a/ui子目录中。基本上一切正常,Angular2应用程序可以通过appname/UIURL访问

但是,我想知道是否有一种方法可以告诉Spring“通过”/ui路径的子级的URL,因为目前Spring会拦截每个以/ui/*为目标的请求,从而阻止Angular2路由器正确导航到/ui路径下的资源

目前,我的一个控制器中只有此映射:

@RequestMapping(value = "/ui")
public String uiIndex() {
    return "/ui/index.html";
}
这样,界面会正确地显示在/ui上,但是Spring会给我发送错误和404,当我直接从浏览器中处理它们时,。不过,Angular2应用程序中的路由器导航功能非常出色

编辑

我使用此配置将编译后的Angular2资源从target/ui添加到static/ui文件夹(我的项目使用maven build):


${project.basedir}/src/main/resources
*.物业
模板/**
目标/用户界面
静态/用户界面

需要明确的是,唯一的问题是,当我在浏览器中输入URL(如/ui/home/settings)时,Spring会拦截请求并抛出错误。我可以很高兴地导航到/ui,然后在角度上下文中导航到/home/settings。

您可以添加ResourceHandler来配置spring boot中的静态内容服务

范例

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/ui").addResourceLocations("file:/path/to/your/angular/files");
    }
}


现在,你提到的教程的第5步有一个更简洁的方法,你跳过了那一步吗?(src/main/resources/static)

经过一番尝试和错误,我终于做到了我想要的。非常感谢@EpicPandaforce和

最终的解决方案是在
@控制器中创建
@RequestMapping
,如下所示:

@RequestMapping(value = "/ui/**/{path:[^\\.]*}")
public String redirectUi() {
    return "forward:/ui/index.html";
}

我认为最简单的方法就是使用角度散列定位策略

从'@angular/common'导入{LocationStrategy,HashLocationStrategy}

{provide:LocationStrategy,useClass:HashLocationStrategy}


我希望能提供帮助。

Spring boot应用程序中静态资源的标准位置在src/main/resources/static下。只要把你的角度资源放在那里,Spring Boot就会为你服务。你可能想要一个以
/**
结尾的映射。你看到了吗?还有可能@EpicPandaForce是的,我想我需要这样的东西,但我的角度资源似乎不在static/下,而是在static/ui下。我尝试使用
@RequestMapping(value=“/{path:[^\\\.]*}”)
添加ui/片段,但似乎不起作用。我仍在努力……请看我编辑的问题,我希望现在能更清楚一点,我真正的问题是什么。:)我想在“path:”位之前有一个额外的“[”。
@RequestMapping(value = "/ui/**/{path:[^\\.]*}")
public String redirectUi() {
    return "forward:/ui/index.html";
}