ライブサーバー-3-WebMvcConfigurerAdapter MVCのプロフィール

ただ、2点を更新する必要がWebMvcConfigurerAdapterこのクラス、知識発見をチェックします:

  1. WebMvcConfigurerAdapterは、リソース傍受、さまざまなインターセプタを解決するために、だけでなく、ページジャンプ他の問題を、クロスドメイン、ビューの解像度、情報の傍受を解決するために指定するだけではなく、コンフィギュレーション・クラスSpringbootです。
  2. このクラスは、春5にされているが推奨されていません。

私が春を見たり、あまりにも長い間、少し無知ではなかったようです。しかし、誰が、私は彼のプロジェクト、またはそれを記述するかどうかを使用してみましょう。

定義および一般的な方法WebMvcConfigurerAdapter

WebMvcConfigurerAdapterはWebMvcConfigurerインタフェースを実装する抽象クラスです。次のようにクラスが定義されています。

public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
    /** 配置路径匹配参数 */
	@Override
	public void configurePathMatch(PathMatchConfigurer configurer) {}
    /** 配置内容裁决的一些选项 */
	@Override
	public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}
    /** 使得springmvc在接口层支持异步 */
	@Override
	public void configureAsyncSupport(AsyncSupportConfigurer configurer) {}
    /** 默认静态资源处理器  */
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}
    /** 注册参数转换和格式化器 */
	@Override
	public void addFormatters(FormatterRegistry registry) {}
    /** 添加拦截器 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {}
     /**静态资源处理  */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {}
    /** 解决跨域问题 */
	@Override
	public void addCorsMappings(CorsRegistry registry) {}
    /** 视图跳转控制器 */
	@Override
	public void addViewControllers(ViewControllerRegistry registry) {}
    /** 配置视图解析器  */
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {}
    /** 注册自定义控制器(controller)方法参数类型 */
	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {}
    /** 注册自定义控制器(controller)方法返回类型 */
	@Override
	public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {}
    /** 信息转换器*/
	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
    /** 仅添加一个自定义的HttpMessageConverter,不覆盖默认注册的HttpMessageConverter */
	@Override
	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}
    /** 注册异常处理 */
	@Override
	public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}
    /** 多个异常处理,可以重写次方法指定处理顺序等 */
	@Override
	public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}

	@Override
	public Validator getValidator() {
		return null;
	}

	@Override
	public MessageCodesResolver getMessageCodesResolver() {
		return null;
	}
}
复制代码

実現WebMvcConfigurerAdapter

プロジェクトでは主にインターセプトする静的リソースの解放とエラーページのプロジェクトです。WebMvcConfigurerAdapterを継承するクラスを作成し、@Configurationがコメントを追加し、その後、傍受、リソースの解放と他の方法を実現。

@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

	/**
	 * 静态资源处理
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// 不过滤templates/js、img、fonts文件下的文件
		registry.addResourceHandler("/css/**").addResourceLocations("classpath:/templates/css/");
		registry.addResourceHandler("/fonts/**").addResourceLocations("classpath:/templates/fonts/");
		registry.addResourceHandler("/img/**").addResourceLocations("classpath:/templates/img/");
		registry.addResourceHandler("/js/**").addResourceLocations("classpath:/templates/js/");
		registry.addResourceHandler("/error/**").addResourceLocations("classpath:/templates/error/");

		// 后台
		registry.addResourceHandler("/admin/lib/**").addResourceLocations("classpath:/templates/admin/lib/");
		registry.addResourceHandler("/admin/images/**").addResourceLocations("classpath:/templates/admin/images/");
		registry.addResourceHandler("/admin/js/**").addResourceLocations("classpath:/templates/admin/js/");
		registry.addResourceHandler("/admin/stylesheets/**")
				.addResourceLocations("classpath:/templates/admin/stylesheets/");
	}

	/**
	 * 拦截器处理
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(errorPageInterceptor());
	}
	/**
	 * 错误页面404 500
	 * @return
	 */
	@Bean
	public ErrorPageInterceptor errorPageInterceptor() {
		return new ErrorPageInterceptor();
	}
}
复制代码

ErrorPageInterceptor実現:このクラスは、主のHttpServletRequestとHttpServletResponseのインターセプト処理のために、HandlerInterceptorインターセプタを達成しています。

public class ErrorPageInterceptor implements HandlerInterceptor {
	private static final Logger log = LoggerFactory.getLogger(ErrorPageInterceptor.class);

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		log.debug("ErrorPageInterceptor.preHandle()");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		log.debug("ErrorPageInterceptor.postHandle()");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		int status = response.getStatus();
		switch (status) {
		case 500:
			request.getRequestDispatcher("500").forward(request, response);
			break;
		case 404:
			 request.getRequestDispatcher("404").forward(request, response);
			break;
		case 403:
			request.getRequestDispatcher("403").forward(request, response);
			break;
		default:
			break;
		}
	}
}
复制代码

MVCプロファイルの春5

Spring5に言及した記事の冒頭では、その後どのようにMVC構成を実現するために、WebMvcConfigurerAdapterを推奨していませんか?答えは簡単です、それは、静的リソース処理をWebMvcConfigureインターセプタを完了するためのインタフェースを実装するクラスを作成することで、ページには、クロスドメイン機能をジャンプします。実装に関しては、スプリング5 WebMvcConfigurerAdapterオーバーヘッドクラスを減少させました。

おすすめ

転載: juejin.im/post/5d5d3a49f265da03f47c25c3