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에서 수행할 수 있습니다(현재는 더 이상 사용되지 않음).WebMvcConfigurerAdaptor
class. 이것은 이 스택 오버플로 스레드에서 자세히 논의됩니다: 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
'programing' 카테고리의 다른 글
C에서 사용 가능한 스택 크기 확인 중 (0) | 2023.07.04 |
---|---|
JDBC를 사용하여 저장 프로시저에서 Oracle 테이블 유형 가져오기 (0) | 2023.07.04 |
상하좌우 이동 및 확대/축소 (0) | 2023.07.04 |
printf를 사용하여 0 뒤에 오는 경우 소수점 이하의 자리 없이 부동 소수점 이하의 형식 지정 (0) | 2023.07.04 |
구문 오류: 가능하지 않습니다. 이 오류는 무엇입니까? (0) | 2023.07.04 |