В прошлой статье мы наткнулись на интерфейс WebMvcConfigurer. Сегодня давайте посмотрим на методы в нем.
Зачем использовать WebMvcConfigurer?
WebMvcConfigurer — это интерфейс, который предоставляет множество пользовательских перехватчиков, таких как междоменные настройки, преобразователи типов и многое другое. Можно сказать, что в этом интерфейсе заранее продуманы многие требования уровня перехвата для разработчиков, что разработчикам удобно выбирать и свободно использовать. Поскольку Spring 5.0 отказался от WebMvcConfigurerAdapter, WebMvcConfigurer наследует большую часть содержимого WebMvcConfigurerAdapter.
Знакомство с методом WebMvcConfigurer
Из-за слишком большого содержания отображаются только 3 ключевых интерфейса, которые используются меньше, просто для пояснения смысла, более подробного объяснения нет, и меньше используется, не читайте, ведь методов больше десяти...
1.configurePathMatch(PathMatchConfigurer configurer)
Это используется меньше, и это связано с путем доступа. Например, PathMatchConfigurer имеет конфигурацию setUseTrailingSlashMatch(), если для нее установлено значение true (по умолчанию true), добавление косой черты после него не влияет на доступ к пути, например «/user» эквивалентно «/user/ ". Мы редко что-либо делаем на пути доступа во время разработки, поэтому, пожалуйста, изучите этот метод самостоятельно, если он вам нужен.
2.configureContentNegotiation(ContentNegotiationConfigurer configurer)
Буквальный перевод этой вещи называется механизмом согласования контента, который в основном предназначен для облегчения пути запроса для возврата нескольких форматов данных. В конфигурации ContentNegotiationConfigurer вы увидите MediaType, который имеет множество форматов. Здесь этот метод не повторяется.
3.configureAsyncSupport(AsyncSupportConfigurer configurer)
Как следует из названия, он обрабатывает асинхронные запросы. Можно установить только два значения: время ожидания (в миллисекундах, значение по умолчанию в Tomcat — 10000 миллисекунд или 10 секунд), а другое — AsyncTaskExecutor, асинхронный исполнитель задачи.
4.configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
Этот интерфейс обеспечивает доступ к статическим файлам, как к сервлетам.
5.addFormatters(FormatterRegistry registry)
Добавьте конвертеры или форматтеры. Здесь вы можете не только преобразовать время в нужный вам часовой пояс или стиль. Вы также можете настроить преобразователь для взаимодействия с вашей базой данных, например, для передачи идентификатора пользователя, и вы можете получить объект пользователя после преобразования.
6.addInterceptors(InterceptorRegistry registry)
Заглядывая вперед, заглядывая вперед, у вас есть общий метод. Этот метод может настроить перехватчик и указать путь перехвата. Давай, напишем перехватчик.
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle,ok,假设给你一个true,运行去吧");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle,ok,看看我什么时候运行的。");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion,ok,看完不点个赞再走吗?");
}
}
Затем настройте его:
@Configuration
public class MyConfigurer implements WebMvcConfigurer {
@Bean
public MyInterceptor getMyInterceptor(){
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(this.getMyInterceptor())
.addPathPatterns("/abc","/configurePathMatch");
}
}
Видно, что можно попробовать добавить несколько путей в addPathPatterns(), или написать "/**", включая все пути, нужно попытаться их перехватить.
Проверьте это, вывод:
preHandle,ok,假设给你一个true,运行去吧
===》执行业务逻辑===》
postHandle,ok,看看我什么时候运行的。
afterCompletion,ok,看完不点个赞再走吗?
7.addResourceHandlers(ResourceHandlerRegistry registry)
Пользовательское сопоставление ресурсов. Эта штука тоже чаще используется.Бизнес-сценарий таков, что ваш собственный сервер используется в качестве файлового сервера.Без использования стороннего мап-беда вам нужен виртуальный путь для сопоставления с адресом нашего сервера. Стоит отметить, что если ваш проект запускается с помощью war-пакета, он обычно настраивается в Tomcat (пожалуйста, Baidu для метода настройки); если он запускается с помощью jar-пакета (SpringBoot часто запускается таким образом), вы можете использовать этот метод. Например:
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/my/**")
.addResourceLocations("file:E:/my/");
super.addResourceHandlers(registry);
}
Реальному пути, в случае если в качестве сервера используется Windows, должен предшествовать файл:.
8.addCorsMappings(CorsRegistry registry)
Это междоменная проблема, и ее необходимо настраивать почти каждому фоновому серверу. Однажды я написал статью о междоменных проблемах и о том, как настроен SpringBoot, пожалуйста, запросите:nuggets.capable/post/684490…
9.addViewControllers(ViewControllerRegistry registry)
Этот метод может быть реализован, путь автоматически переходит на страницу. Однако сейчас большая часть проектов отделена от фронтенда и бэкенда, можно ли перекинуть проблему джамп-роутинга сразу на фронтенд?
Есть еще семь: configureViewResolvers, addArgumentResolvers, addReturnValueHandlers, configureMessageConverters, extendMessageConverters, configureHandlerExceptionResolvers, extendHandlerExceptionResolvers. Это потому, что он используется слишком мало, так что не смотрите его больше.
резюме
Эта статья сначала знает, что это за методы.Самое главное, знать, что WebMvcConfigurer сделал несколько общих перехватчиков для нашего слоя перехвата, которые удобно использовать разработчикам. Конечно, вы также можете реализовать перехватчики самостоятельно. Наиболее распространены 6, 7 и 8. Другие будут иметь возможность изучить и обновить позже.