나는 스프링 mvc 버전으로 마이그레이션 5.0.1.RELEASE
했지만 갑자기 이클립스 STS에서 WebMvcConfigurerAdapter가 더 이상 사용되지 않는 것으로 표시됩니다.
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
// to serve static .html pages...
registry.addResourceHandler("/static/**").addResourceLocations("/resources/static/");
}
....
}
어떻게 제거 할 수 있습니까?
답변
Spring 5부터 인터페이스를 구현하면됩니다 WebMvcConfigurer
.
public class MvcConfig implements WebMvcConfigurer {
이는 Java 8이 WebMvcConfigurerAdapter
클래스 의 기능을 다루는 인터페이스에 기본 메서드를 도입했기 때문입니다.
여기를 보아라:
답변
나는 Springfox
현재 Swagger와 동등한 문서 라이브러리에서 작업 해 왔으며 Spring 5.0.8 (현재 실행 중)에서 인터페이스 WebMvcConfigurer
가 WebMvcConfigurationSupport
직접 확장 할 수있는 클래스 클래스에 의해 구현되었음을 발견했습니다 .
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
public class WebConfig extends WebMvcConfigurationSupport { }
그리고 이것은 리소스 처리 메커니즘을 다음과 같이 설정하는 데 사용하는 방법입니다.
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
답변
사용하다 org.springframework.web.servlet.config.annotation.WebMvcConfigurer
Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE)를 사용하여 다음과 같이하십시오.
package vn.bkit;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; // Deprecated.
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer {
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
답변
Spring에서는 모든 요청이 DispatcherServlet을 통과합니다 . DispatcherServlet (Front contoller)을 통한 정적 파일 요청을 피하기 위해 MVC 정적 콘텐츠를 구성 합니다 .
봄 3.1. 클래스 경로, WAR 또는 파일 시스템에서 정적 리소스를 제공하기 위해 ResourceHttpRequestHandlers를 구성하기 위해 ResourceHandlerRegistry가 도입되었습니다. 웹 컨텍스트 구성 클래스 내에서 프로그래밍 방식으로 ResourceHandlerRegistry를 구성 할 수 있습니다.
/js/**
ResourceHandler에 패턴을 추가foo.js
했습니다.webapp/js/
디렉토리 에 있는 리소스를 포함 할 수 있습니다./resources/static/**
ResourceHandler에 패턴을 추가foo.html
했습니다.webapp/resources/
디렉토리 에 있는 리소스를 포함 할 수 있습니다.
@Configuration
@EnableWebMvc
public class StaticResourceConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
System.out.println("WebMvcConfigurer - addResourceHandlers() function get loaded...");
registry.addResourceHandler("/resources/static/**")
.addResourceLocations("/resources/");
registry
.addResourceHandler("/js/**")
.addResourceLocations("/js/")
.setCachePeriod(3600)
.resourceChain(true)
.addResolver(new GzipResourceResolver())
.addResolver(new PathResourceResolver());
}
}
XML 구성
<mvc:annotation-driven />
<mvc:resources mapping="/staticFiles/path/**" location="/staticFilesFolder/js/"
cache-period="60"/>
파일이 WAR의 webapp / resources 폴더 에있는 경우 Spring Boot MVC 정적 콘텐츠 .
spring.mvc.static-path-pattern=/resources/static/**