ชนิด WebMvcConfigurerAdapter เลิกใช้แล้ว


116

ฉันเพิ่งย้ายไปเป็นเวอร์ชัน spring mvc 5.0.1.RELEASEแต่ทันใดนั้นใน eclipse 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/");
    }
  ....
  }

จะเอาออกได้ยังไง!

คำตอบ:


227

ตั้งแต่ Spring 5 คุณต้องติดตั้งอินเทอร์เฟซWebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

เนื่องจาก Java 8 แนะนำวิธีการเริ่มต้นบนอินเทอร์เฟซซึ่งครอบคลุมฟังก์ชันการทำงานของWebMvcConfigurerAdapterคลาส

ดูที่นี่:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurerAdapter.html


1
ถ้าฉันมีฉันsuper.configureMessageConverters(converters)จะแปลรหัสนี้ได้อย่างไร? ตอนนี้ไม่มีที่superจะอ้างถึง
tryHard

1
@yami คุณเรียกแค่ configMessageConverters (ตัวแปลง) ซึ่งจะเรียกใช้วิธีการเริ่มต้นที่กำหนดบนอินเทอร์เฟซ
Plog

@Plog, @Yami: การทำตามที่แนะนำจะก่อให้เกิด a java.lang.StackOverflowErrorเนื่องจากการละเว้นการ.superเริ่มต้นการวนซ้ำแบบเรียกซ้ำไม่สิ้นสุด
ThirstForKnowledge

2
การเพิ่มตัวแปลงในรายการจะปิดการลงทะเบียนตัวแปลงเริ่มต้น โดยการเรียก super.configureMessageConverters (ตัวแปลง) ก่อนอื่นคุณอาจต้องการเก็บตัวแปลงเริ่มต้นไว้ หากต้องการเพิ่มตัวแปลงโดยไม่ส่งผลกระทบต่อการลงทะเบียนเริ่มต้นให้พิจารณาใช้วิธีการextendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ) แทน
ThirstForKnowledge

1
@ThirstForKnowledge โอ้นี่ฉันไม่ดี วิธีที่คุณควรเรียกใช้ super default method บนอินเทอร์เฟซคือ WebMvcConfigurer.super.configureMessageConverters (ตัวแปลง)
Plog

7

ฉันทำงานกับไลบรารีเอกสารเทียบเท่า Swagger ที่เรียกว่าSpringfoxในปัจจุบันและฉันพบว่าใน 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/");
}

1

ใช้ 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();
    }

}

0

ในฤดูใบไม้ผลิทุกคำขอจะไปผ่านDispatcherServlet เพื่อหลีกเลี่ยงการร้องขอไฟล์แบบคงที่ผ่าน DispatcherServlet (contoller ด้านหน้า) เรากำหนดค่าเนื้อหา MVC แบบคงที่

ฤดูใบไม้ผลิ 3.1. แนะนำ ResourceHandlerRegistry เพื่อกำหนดค่า ResourceHttpRequestHandlers สำหรับการให้บริการทรัพยากรแบบคงที่จาก classpath, WAR หรือระบบไฟล์ เราสามารถกำหนดค่า 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"/>

Spring Boot MVC Static Contentหากไฟล์อยู่ในโฟลเดอร์webapp / resourcesของ WAR

spring.mvc.static-path-pattern=/resources/static/**
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.