2016-07-27 71 views
5

我正在尝试使用maven为Spring后端开发一个应用程序,使用Maven为前端开发Angular 2。使用Spring Boot和Angular 2进行URL处理的问题

角度2前端位于项目的src/main/resources/static目录中。

当我在浏览器中输入​​URL时,一切正常:我可以访问angular 2前端,并且前端可以完美地与其余api进行通信。我的角度2路由工作正常:当我点击前端链接,我去右边的页面和浏览器的网吧显示正确的东西(即http://localhost:8080/documents

但问题是,当我试图直接在浏览器中写入相同的URL。春季接管前端,并表示/documents没有映射。

有没有办法告诉春季启动只“聆听”/api/*网址和“重定向”所有其他人到前端?

这里是我的春天Controller类:

@RestController 
@RequestMapping("/api") 
public class MyRestController { 

    @Autowired 
    private DocumentsRepository documentRepository; 

    @CrossOrigin(origins = "*") 
    @RequestMapping(value = "/documents/list", 
      method = RequestMethod.GET, 
      produces = "application/json") 
    public Iterable<RfDoc> findAllDocuments() { 
     return documentRepository.findAll(); 
    } 

} 

这里是主要的应用程序类:

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

这里是我的app.route.ts:

import { provideRouter, RouterConfig } from '@angular/router'; 
import { DocumentComponent } from './doc.component'; 

const routes: RouterConfig = [ 
    { 
     path: '', 
     redirectTo: 'documents', 
     pathMatch: 'full' 
    }, 
    { 
     path: "documents", 
     component: DocumentComponent 
    } 
]; 

export const appRouterProviders = [ 
    provideRouter(routes) 
]; 
+0

有一种方法只能听/ api/*。为此,你需要有一个过滤器。 – sparrow

+0

我该怎么做?我对这个东西很新... – Eric

回答

3

好,所以我找到了一个非常好的解决方案(至少对我来说):我改变了旧的AngularJS 1.X方式的位置,使用URL中的# (即http://localhost:8080/#/documents)。

要获得这种行为,我改变我的自举这样

import { bootstrap }  from '@angular/platform-browser-dynamic'; 
import { HTTP_PROVIDERS } from '@angular/http'; 

import { AppComponent }   from './app.component'; 
import { appRouterProviders } from './app.routes'; 
import { AuthService }   from './auth.service'; 

bootstrap(AppComponent, [AuthService, 
    appRouterProviders, 
    HTTP_PROVIDERS, 
    { provide: LocationStrategy, useClass: HashLocationStrategy } 
]); 

希望这可以帮助别人!

+0

不要使用uglt标签符号...只是保持HTML5的位置策略,并将所有的angular2路由重定向到index.html文件。不要重定向所有的路由,因为您将需要它们为您的端点资源(其余控制器)。 – AndroidLover

+0

我该如何做重定向? – Eric

+0

埃里克请创建一个问题并发布链接,以便我可以通过一些代码。 – AndroidLover

相关问题