2016-07-27 7 views
5

Próbuję opracować aplikację z Spring Boot na końcu i Angular 2 na przednim końcu, używając maven.Problemy z obsługą adresów URL za pomocą Spring Boot i Angular 2

Przedni koniec kątowy znajduje się w katalogu projektu src/main/resources/static.

Po wprowadzeniu adresu URL http://localhost:8080/ w przeglądarce wszystko jest w porządku: mogę uzyskać dostęp do 2 kątowego przedniego końca, a front może się doskonale komunikować z resztą api. Moja nawigacja kątowa 2 działa dobrze: po kliknięciu linku na przednim końcu przechodzę w odpowiednią stronę, a pasek adresu URL przeglądarki pokazuje właściwe rzeczy (np. http://localhost:8080/documents)

Ale problem jest, gdy próbuję bezpośrednio napisz ten sam adres URL w przeglądarce. Wiosna przejmuje frontowy koniec i mówi, że nie ma mapowania dla /documents.

Czy istnieje sposób, aby nakazać wiosennemu startowi, aby "wsłuchał się" w adres URL /api/* i "przekierował" wszystkie pozostałe do interfejsu?

Oto moja Wiosna klasa Kontroler:

@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(); 
    } 

} 

Oto główna klasa aplikacji:

@SpringBootApplication 
public class Application { 

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

} 

Oto moje 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

Istnieje sposób słuchania/tylko api/*. Do tego potrzebny jest filtr. – sparrow

+0

Jak mogę to zrobić? Jestem całkiem nowy w tej dziedzinie ... – Eric

Odpowiedz

3

Ok, więc znalazłem doskonałe rozwiązanie (przynajmniej dla mnie): zmieniam lokalizację dla starego sposobu AngularJS 1.X, z # w adresie URL (to znaczy. http://localhost:8080/#/documents).

Aby uzyskać ten problem, mogę zmienić bootstrap jak ten

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 } 
]); 

nadzieję, że może komuś pomóc!

+0

Nie używaj notacji hashtag uglt ... po prostu trzymaj strategię lokalizacji HTML5 i przekierowuj wszystkie trasy swojego Angulara2 do pliku index.html. Nie przekierowuj wszystkich tras, ponieważ będziesz ich potrzebował do zasobów punktów końcowych (pozostałych kontrolerów). – AndroidLover

+0

Jak mogę wykonać przekierowanie? – Eric

+0

Eric, proszę utworzyć pytanie i opublikować link, aby przejść przez jakiś kod. – AndroidLover

Powiązane problemy