Jenis WebMvcConfigurerAdapter tidak digunakan lagi


116

Saya baru saja bermigrasi ke versi mvc musim semi 5.0.1.RELEASEtetapi tiba-tiba di gerhana STS WebMvcConfigurerAdapter ditandai sebagai tidak digunakan lagi

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

Bagaimana saya bisa menghapus ini!

Jawaban:


227

Sejak Spring 5 Anda hanya perlu mengimplementasikan antarmuka WebMvcConfigurer:

public class MvcConfig implements WebMvcConfigurer {

Ini karena Java 8 memperkenalkan metode default pada antarmuka yang mencakup fungsionalitas WebMvcConfigurerAdapterkelas

Lihat disini:

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


1
Bagaimana jika saya punya, super.configureMessageConverters(converters)bagaimana sekarang saya bisa menerjemahkan kode ini? Sekarang tidak ada yang superbisa dirujuk.
TryHard

1
@yami Anda cukup memanggil configureMessageConverters (konverter) ini akan menjalankan metode default yang ditentukan pada antarmuka
Plog

@Plog, @Yami: Melakukan seperti yang disarankan akan menghasilkan a java.lang.StackOverflowError, karena menghilangkan .superawal loop panggilan rekursif dan tidak pernah berakhir.
ThirstForKnowledge

2
Menambahkan konverter ke daftar, mematikan pendaftaran konverter default. Dengan memanggil super.configureMessageConverters (konverter) terlebih dahulu, Anda mungkin ingin menyimpan konverter default. Untuk menambahkan konverter tanpa memengaruhi pendaftaran default, pertimbangkan untuk menggunakan metode extendMessageConverters(java.util.List)( docs.spring.io/spring/docs/current/javadoc-api/org/… ) sebagai gantinya.
ThirstForKnowledge

1
@ThirForKnowledge Oh ini adalah kesalahanku. Cara Anda harus memanggil metode super default pada antarmuka adalah: WebMvcConfigurer.super.configureMessageConverters (konverter)
Plog

7

Saya telah mengerjakan pustaka dokumentasi setara Swagger yang disebut Springfoxsaat ini dan saya menemukan bahwa di Spring 5.0.8 (berjalan saat ini), antarmuka WebMvcConfigurertelah diimplementasikan oleh kelas WebMvcConfigurationSupportkelas yang dapat kita kembangkan secara langsung.

import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

public class WebConfig extends WebMvcConfigurationSupport { }

Dan inilah cara saya menggunakannya untuk menyetel mekanisme penanganan sumber daya saya sebagai berikut -

@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

Menggunakan org.springframework.web.servlet.config.annotation.WebMvcConfigurer

Dengan Spring Boot 2.1.4.RELEASE (Spring Framework 5.1.6.RELEASE), lakukan seperti ini

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

Di Musim Semi, setiap permintaan akan melalui DispatcherServlet . Untuk menghindari permintaan file Statis melalui DispatcherServlet (Front contoller) kita mengkonfigurasi konten MVC Static .

Musim semi 3.1. memperkenalkan ResourceHandlerRegistry untuk mengonfigurasi ResourceHttpRequestHandlers untuk melayani sumber daya statis dari classpath, WAR, atau sistem file. Kita dapat mengkonfigurasi ResourceHandlerRegistry secara terprogram di dalam kelas konfigurasi konteks web kita.

  • kami telah menambahkan /js/**pola ke ResourceHandler, mari sertakan foo.jssumber daya yang terletak di webapp/js/direktori
  • kami telah menambahkan /resources/static/**pola ke ResourceHandler, mari sertakan foo.htmlsumber daya yang terletak di webapp/resources/direktori
@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());
    }
}

Konfigurasi XML

<mvc:annotation-driven />
  <mvc:resources mapping="/staticFiles/path/**" location="/staticFilesFolder/js/"
                 cache-period="60"/>

Spring Boot MVC Static Content jika file tersebut terletak di folder webapp / resource WAR .

spring.mvc.static-path-pattern=/resources/static/**
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.