Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot/Angular 4 - Routing in app hits the server

I have an Angular 4 (ES6) app that I want to serve from a Spring Boot application. My Angular app has an index.html, and when the address of http://localhost:8080 is hit, Spring Boot knows to map to the index.html file which in Angular is mapped to "/search".

However, I have another route called "adminlogin" which I would access through

http://localhost:8080/adminLogin

But in this instance, it hits my Spring Boot application, which doesn't have a mapping and then it throws an error.

How do I get my address of http://localhost:8080/adminLogin to go to my Angular app?

like image 652
Black Dynamite Avatar asked Sep 11 '17 05:09

Black Dynamite


People also ask

Where does Angular spring boot go?

The angular project should be created inside the Spring Boot project folder. If it is an existing Angular application, just add it to the Spring Boot project folder. Create a Gradle Script to run the entire Spring Boot project.


2 Answers

I had the similar issue with my SpringBoot 2 and Angular6 app. I implemented the WebMvcConfigurer interface to override addResourceHandlers() method and redirect to index.html when there were no mappings found in spring controllers. this can be done in Spring boot 1.5.x extending the (now deprecated) WebMvcConfigurerAdaptor class. this is discussed in details in this stackoverflow thread: https://stackoverflow.com/a/46854105/2958428 I put my built angular app in this location target/classes/static using the outputPath field in angular.json (previously .angular-cli.json). Here's the sample code:

@Configuration
public class MyAppWebMvcConfigurer implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**/*")
            .addResourceLocations("classpath:/static/")
            .resourceChain(true)
            .addResolver(new PathResourceResolver() {
                @Override
                protected Resource getResource(String resourcePath, Resource location) throws IOException {
                    Resource requestedResource = location.createRelative(resourcePath);
                    return requestedResource.exists() && requestedResource.isReadable() ? requestedResource : new ClassPathResource("/static/index.html");
                }
            });
    }
}
like image 104
Avdhut Mankavale Avatar answered Oct 23 '22 02:10

Avdhut Mankavale


Since the path adminlogin was not mapped in any of the spring controller spring application dispatch the request to /error, Hence you are getting the error page.

You need to route it back to angular so that the adminlogin page will be routed by Angular.

Following the simple route to do so.

@Controller
public class RouteToAngular implements ErrorController {

    @RequestMapping("/error")
    public String handleError() {
        return "/";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

Note: Don't forget to implement the 404 page in Angular.

I hope this will be help.

like image 7
Arun Prakash Avatar answered Oct 23 '22 02:10

Arun Prakash