WebMvcアセンブリ拡張

前書き

WebMvcConfigurer構成クラスは、実際にはSpring内部構成メソッドです。JavaBeanフォームを使用して、従来のxml構成ファイルフォームを置き換え、フレームワークをカスタマイズします。一部のHandler、Interceptor、ViewResolver、およびMessageConverterをカスタマイズできます。javaベースのモードに基づくSpringMVC構成の場合、構成クラスを作成し、****WebMvcConfigurerインターフェイスを実装する必要があります。

WebMvcAutoConfigurationは、Webプロジェクトに関するいくつかのファイルを構成するWebMvcの自動構成クラスであり、WebMvcConfigurerは、WebMvcAutoConfiguration自動構成クラスを補足するために使用されるインターフェイスです。つまり、WebMvcAutoConfigurationで考慮されない場所がある場合は、WebMvcConfigurerインターフェイスを介して拡張できます。 。

WebMvcConfigurerインターフェイス

public interface WebMvcConfigurer {
    default void configurePathMatch(PathMatchConfigurer configurer) {
    }
    default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    }
    default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
    }
    default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    }
    default void addFormatters(FormatterRegistry registry) {
    }
    default void addInterceptors(InterceptorRegistry registry) {
    }
    default void addResourceHandlers(ResourceHandlerRegistry registry) {
    }
    default void addCorsMappings(CorsRegistry registry) {
    }
    default void addViewControllers(ViewControllerRegistry registry) {
    }
    default void configureViewResolvers(ViewResolverRegistry registry) {
    }
    default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
    }
    default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
    }
    default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    }
    default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    }
    default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    }
    default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    }
    @Nullable
    default Validator getValidator() {
        return null;
    }
    @Nullable
    default MessageCodesResolver getMessageCodesResolver() {
        return null;
    }
}

一般的に使用される方法:

 /* 拦截器配置 */
void addInterceptors(InterceptorRegistry var1);
/* 视图跳转控制器 */
void addViewControllers(ViewControllerRegistry registry);
/**
     *静态资源处理
**/
void addResourceHandlers(ResourceHandlerRegistry registry);
/**
     * 这里配置视图解析器
 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;

addInterceptors:インターセプター

まず、以下に示すようにインターセプタークラスを作成する必要があります

ここに写真の説明を挿入

次に、以下に示すように、springmvc拡張クラスのaddInterceptorsメソッドにコードを記述する必要があります。

ここに写真の説明を挿入

最後にテストフェーズです。

ここに写真の説明を挿入

  • addInterceptor:HandlerInterceptorインターフェースを実装するインターセプターインスタンスが必要です
  • addPathPatterns:addPathPatterns("/**")インターセプターのフィルターパスルールを設定するために使用されます;すべてのリクエストをインターセプトします
  • excludePathPatterns:傍受する必要のないフィルタリングルールを設定するために使用されます
  • インターセプターの主な目的:ユーザーのログインステータスをインターセプトする、ログをインターセプトするなど。

addResourceHandlers:静的リソース

springbootには4つのデフォルトの静的ディレクトリがあります:classpath:/ META-INF / resources /、classpath:/ resources /、classpath:/ static /、classpath:/ public

これらの4つの静的ディレクトリの外部に公開されているパスはすべて/ **です。つまり、これらの4つの静的ディレクトリ内のものにアクセスするときに、localhost:8080 /インターフェイスを直接使用できます。

これで、addResourceHandlersを使用して必要な静的ディレクトリをカスタマイズできます。このプロセスは、既存の4つの静的リソースディレクトリには影響しません。

具体的なコードは次のとおりです。

ここに写真の説明を挿入

addViewControllers:ページジャンプ

ページジャンプとは、templatesフォルダー内のhtmlファイルに直接アクセスできないことを意味します。たとえば、templatesフォルダー内にlogin.htmlファイルがあります。

localhost:8080 / login.htmlは、このようにアクセスできません。このソリューションは、上記のaddResourceHandlersで静的リソースを指定することで解決できます。もちろん、たとえば、テンプレートディレクトリのlogin.htmlファイルにアクセスする場合は、コントローラーでも解決できます。コントローラでRequestMapping(path = "/ toLogin")メソッドを記述し、このメソッドが「login」を返すようにすることができます。これにより、コントローラを介して、つまりlocalhost:8080 /を介してテンプレートディレクトリのlogin.htmlファイルにアクセスできます。 toLoginインターフェイスアクセス。しかし、コントローラーコードを書くのは面倒です。次のように、addViewControllersメソッドで直接コードを書くことができます。

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        registry.addViewController("/toLogin").setViewName("login");
    }

これにより、上記のコントローラーを作成するのと同じ効果が得られます。また、localhost:8080 / toLoginインターフェイスを介してテンプレートのlogin.htmlファイルにアクセスすることもできます。

また、このメソッドは、コントローラーコントローラーパッケージに記述されているコントローラーには影響しません。

configureViewResolvers:ビューリゾルバー

ここに写真の説明を挿入

注意が必要な詳細の1つは、springbootにthymeleafエンジンテンプレートがある場合、デフォルトのビューリゾルバーはprefix:classpath:/ templates /です。

接尾辞:.htmlであり、これが最も優先度が高く、他のビューパーサーがある限り、構成されていても役に立ちません。

addCorsMappings:クロスドメイン

ここに写真の説明を挿入
クロスドメインの問題を解決するためにspringbootで構成されたファイルは次のとおりです
ここに写真の説明を挿入
。allowedOriginsメソッドのパラメーターはspringboot自体のURLではなく、他のURLであることに注意してください。

おすすめ

転載: blog.csdn.net/qq_45950109/article/details/110878953