2017-05-29 31 views
5

Tôi đã tích hợp thành công ứng dụng Angular2 của mình với chương trình phụ trợ Spring Boot sau this tutorial, đặt tài nguyên JS đã biên dịch vào thư mục con/ui. Mọi thứ hoạt động tốt về cơ bản, ứng dụng Angular2 có thể truy cập được thông qua URL ứng dụng /ui.Khởi động mùa xuân + Angular2 trên cùng một máy chủ

Tuy nhiên, tôi muốn biết nếu có một cách để nói với Xuân để 'pass-through' URL mà trẻ em của /ui con đường, như hiện nay Học Kỳ Mùa Xuân chặn tất cả các yêu cầu nhắm mục tiêu /ui/* , ngăn chặn Bộ định tuyến Angular2 điều hướng đúng theo tài nguyên theo đường dẫn /ui.

Hiện nay, tôi chỉ có bản đồ này trong một trong các bộ điều khiển của tôi:

@RequestMapping(value = "/ui") 
public String uiIndex() { 
    return "/ui/index.html"; 
} 

Với điều này, giao diện đúng hiện tại /ui, nhưng mùa xuân gửi cho tôi lỗi và 404s cho tất cả mọi thứ dưới nó, khi tôi giải quyết trực tiếp từ trình duyệt. Định tuyến bộ định tuyến bên trong ứng dụng Angular2 hoạt động hoàn hảo.

EDIT

tôi thêm các nguồn lực Angular2 biên soạn từ các mục tiêu/ui để tĩnh thư mục/ui với cấu hình này (dự án của tôi sử dụng maven xây dựng):

 <resource> 
      <directory>${project.basedir}/src/main/resources</directory> 
      <includes> 
       <include>*.properties</include> 
       <include>templates/*.*</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>target/ui</directory> 
      <targetPath>static/ui</targetPath> 
     </resource> 

Như để được rõ ràng , vấn đề duy nhất là khi tôi nhập URL trong trình duyệt như /ui/home/settings, Spring chặn yêu cầu và phát ra lỗi. Tôi có thể vui vẻ điều hướng đến/ui, và sau đó đến/home/settings trong bối cảnh Angular.

+0

Vị trí chuẩn cho tài nguyên tĩnh trong ứng dụng khởi động Spring nằm dưới src/main/resources/static. Chỉ cần đặt tài nguyên Angular của bạn ở đó và Spring Boot sẽ phục vụ chúng. –

+0

Bạn có thể muốn ánh xạ kết thúc bằng '/ **'. – chrylis

+0

Bạn đã xem https://github.com/spring-guides/tut-spring-security-and-angular-js/blob/master/modular/README.adoc chưa? – EpicPandaForce

Trả lời

1

Sau một số lần thử và lỗi, cuối cùng tôi đã xoay sở để làm những gì tôi muốn. Rất cám ơn đến @EpicPandaforce 's useful commentthis StackOverflow post

Các giải pháp cuối cùng là tạo ra một @RequestMapping trong một @Controller như thế này:

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

Bạn có thể thêm ResourceHandlers để định cấu hình phân phối nội dung tĩnh trong khởi động mùa xuân.

Ví dụ

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

Xem https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content

Bây giờ, Bước 5 của hướng dẫn bạn đề cập có một cách sạch hơn để làm điều này, bạn có bỏ qua bước đó? (src/main/resources/static)

+0

Vui lòng xem câu hỏi đã được chỉnh sửa của tôi, tôi hy vọng nó rõ ràng hơn một chút, vấn đề thực sự của tôi là gì. :) – Sleeper9

0

Tôi nghĩ rằng cách đơn giản nhất để làm những gì bạn muốn là sử dụng chiến lược vị trí băm góc.

import { LocationStrategy, HashLocationStrategy } from '@angular/common';

{ provide: LocationStrategy, useClass: HashLocationStrategy }

tôi hy vọng sẽ giúp đỡ.

Các vấn đề liên quan