2016-07-20 7 views
2

몇 가지 뷰가 설정된 스프링 부트 애플리케이션이 있습니다. 또한 Angular2 앱을 번들로 제공합니다. Angular2 애플리케이션을로드 할 때, 애플리케이션 내에서 루트 링크를 시도 할 때 스프링 MVC가 호출을 가로 채고 관련 뷰를 찾고 오류 페이지를 리턴하지 못한다.Spring Web MVC 애플리케이션에서 Angluar2 경로 제외

http://localhost:8080/index.html은 Angular2 응용 프로그램을로드 한 다음 URL을 단지 http://localhost:8080/으로 다시 작성합니다. 예를 들어 내가 원하는 경로를 탐색하면 http://localhost:8080/invite/12345이면 경로가로드되어 예상대로 작동합니다. http://localhost:8080/invite/12345을 치면 표준 Spring MVC 에러 페이지가 바로 리턴된다.

그러나 Angular2 응용 프로그램을 독립 실행 형 응용 프로그램 (스프링 부트로 제공하지 않음)로 실행하면 해당 링크를 직접 누르는 것이 예상대로 작동합니다. index.html을로드하고 경로를 실행하며 원하는 데이터를 보여줍니다.

Java 구성을 통해 Spring에 /invite/** 경로 (내 Angular2 응용 프로그램이 커지면서 다른 경로도 무시 됨)를 무시하면 내 Angular2 응용 프로그램 내의 경로로 딥 링크 할 수 있습니다.

@SpringBootApplication 
@EnableResourceServer 
public class AuthserverApplication extends WebMvcAutoConfigurationAdapter { 

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

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/login").setViewName("login"); 
     registry.addViewController("/oauth/confirm_access").setViewName("authorize"); 
     registry.addViewController("/success").setViewName("success"); 
    } 

    @Bean 
    public ViewResolver getViewResolver() { 
     final InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setSuffix(".html"); 
     return resolver; 
    } 
} 

이 프로젝트는 봄 부팅 1.3.3.RELEASE에서 상속 :

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 
+0

무시로 무엇을 의미합니까? 그렇다면 무엇이 돌아올 것입니까? 같은 결과 (페이지)를 반환하는 링크를 만드는 방법은 어떻습니까? – acdcjunior

+0

@acdcjunior - 여전히 작동해야하는 스프링 웹 MVC 뷰가 여러 개 있지만 '/ invite/**'경로를 쳤을 때 그 경로는 실제로 번들 된 Angular 2 앱에 의해 제어되므로 경로는 Spring MVC에 의해 처리되지 않는다. – cocovan

+0

Angular2 앱의 루트가'/ invite /'에 있다고 가정합니다. 그렇다면 해당 URL에 대한 요청은 angular2 앱이 포함 된보기를 반환합니다. 동의합니까? 그렇다면,'/ invite/** '에 대한 요청은 URL을 다시 작성하지 않고 동일한 뷰를 가리 키므로 각도가 정확히 어디인지를 알 수 있습니다. 어떻게 생각해? – acdcjunior

답변

0

그래서 나는 결국이 라운드 얻은 방법은 직접 연결하는 것이 었습니다 여기에 현재의 Java 구성입니다 index.html 페이지는 그래서 예를로드 할 angular2 응용 프로그램을 강제로 : 당신의 대답을 기반으로

http://localhost:8080/index.html/#/invite/12345

1

,이 같은 config (설정)과는 일입니다.

@RequestMapping(value = "/*", method = RequestMethod.GET) 
@Override 
public String index() 
{ 
    return "index"; 
} 

@Override 
@RequestMapping(value = "/login/*", method = RequestMethod.GET) 
public String login() 
{ 
    return "redirect:/#/login"; 
} 

그래서 우리는 로컬 호스트에 액세스 할 수 있습니다 : 8080/각 - 응용 프로그램/로그인/404 오류없이.

관련 문제