복붙노트

[SPRING] 와일드 카드 컨트롤러 경로가있는 동안 정적 컨텐츠를 제공하는 Spring

SPRING

와일드 카드 컨트롤러 경로가있는 동안 정적 컨텐츠를 제공하는 Spring

내 응용 프로그램은 백엔드에서 프론트 엔드 및 스프링 프레임 워크에서 백본을 사용하여 빌드됩니다. 그것은 하나의 HTML 응용 프로그램입니다. 경로는 백본에서 처리되므로 다음 구조의 백엔드 경로가 있습니다.

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

모든 것을 내 index.html에 가리 키기 위해서. 정적 콘텐츠 파일도이 경로를 가리키고 있으며 나는 이것을 원하지 않는다. 나는 노력했다. addResourceHandler 메소드를 재정 의하여 WebMvcConfigurerAdapter를 설정하십시오. 정적 콘텐츠이지만 작동하지 않습니다.

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("/resources/js");
    }
}

/ js / ** 및 / assets / **를 제외한 모든 경로를 index.html로 연결하려면 어떻게해야합니까?

고맙습니다

해결법

  1. ==============================

    1.첫 번째로 / **에 매핑 된 컨트롤러 메서드가 모든 리소스 요청보다 우선 순위를 갖습니다. ResourceHandlerRegistry의 우선 순위를 높임으로써이를 해결할 수 있습니다. StaticResourceConfiguration의 addResourceHandlers 메소드에서 registry.setOrder (Ordered.HIGHEST_PRECEDENCE)에 대한 호출을 추가하십시오.

    첫 번째로 / **에 매핑 된 컨트롤러 메서드가 모든 리소스 요청보다 우선 순위를 갖습니다. ResourceHandlerRegistry의 우선 순위를 높임으로써이를 해결할 수 있습니다. StaticResourceConfiguration의 addResourceHandlers 메소드에서 registry.setOrder (Ordered.HIGHEST_PRECEDENCE)에 대한 호출을 추가하십시오.

    @Configuration
    public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
            registry.addResourceHandler("/js/**").addResourceLocations("/resources/js");
        }
    }
    

    둘째, 기본적으로 Spring Boot는 기본적으로 / **로 매핑 된 리소스 핸들러와 / webjars / **에 매핑 된 리소스 핸들러를 기본적으로 구성합니다. 위에서 설명한 변경으로 인해 컨트롤러의 / **에 매핑 된 메서드보다 우선 순위가 높아집니다. 이 문제를 극복하려면 application.properties의 설정을 통해 기본 리소스 처리를 해제해야합니다.

    spring.resources.addMappings=false
    
  2. from https://stackoverflow.com/questions/24537877/spring-serving-static-content-while-having-wildcard-controller-route by cc-by-sa and MIT license