programing

Spring Boot/Angular 4 - 앱 내 라우팅이 서버를 강타합니다.

css3 2023. 7. 4. 22:05

Spring Boot/Angular 4 - 앱 내 라우팅이 서버를 강타합니다.

Spring Boot 애플리케이션에서 서비스하고 싶은 Angular 4(ES6) 앱이 있습니다.내 Angular 앱에는 index.html이 있으며, http://localhost:8080의 주소가 적중하면 스프링 부트는 Angular에서 "/search"에 매핑된 index.html 파일에 매핑되는 것을 알고 있습니다.

하지만 "adminlogin"이라는 다른 경로가 있어요.

http://localhost:8080/adminLogin

하지만 이 경우에는 매핑이 없는 Spring Boot 응용 프로그램을 검색한 다음 오류를 발생시킵니다.

Angular 앱으로 이동하려면 http://localhost:8080/adminLogin 주소를 어떻게 가져오나요?

SpringBoot 2와 Angular6 앱에서도 비슷한 문제가 있었습니다.다음을 구현했습니다.WebMvcConfigurer재정의할 인터페이스addResourceHandlers()메서드 및 리디렉션index.html스프링 컨트롤러에 매핑이 없는 경우.이 작업은 Spring boot 1.5.x에서 수행할 수 있습니다(현재는 더 이상 사용되지 않음).WebMvcConfigurerAdaptorclass. 이것은 이 스택 오버플로 스레드에서 자세히 논의됩니다: https://stackoverflow.com/a/46854105/2958428 저는 제가 만든 각진 앱을 이 위치에 놓았습니다.target/classes/static사용outputPath에 출전하다.angular.json(이전의.angular-cli.json다음은 샘플 코드입니다.

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

그 길 이후로adminlogin스프링에 지도가 없습니다.controller봄 신청서를 로 발송합니다./error따라서 오류 페이지가 표시됩니다.

각도로 다시 연결해야 합니다. 그러면adminlogin페이지가 다음에 의해 라우팅됩니다.Angular.

그렇게 하기 위한 간단한 경로를 따릅니다.

@Controller
public class RouteToAngular implements ErrorController {

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

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

참고: Angular에서 404 페이지를 구현하는 것을 잊지 마십시오.

이것이 도움이 되기를 바랍니다.

저의 경우, "/"로 리디렉션하여 모든 Angular 경로에 대해 ViewControllerRegistry를 사용하여 단순 뷰 컨트롤러를 만들었습니다.

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        List<String> urlPatterns = List.of(
                "/login",
                "/app-home",
                "/another_route"
        );

        urlPatterns.forEach(pattern -> registry.addViewController(pattern).setViewName("forward:/"));
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }
}

이 바보짓을 하지 않고는 루트 URL이 작동하지 않습니다.

@EnableWebMvc
@Configuration
public class MvcConfiguration 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");
                    }
                });

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

언급URL : https://stackoverflow.com/questions/46148843/spring-boot-angular-4-routing-in-app-hits-the-server