[Spring Boot] Веб-разработка — веб-конфигурация

веб-конфигурация

В этом разделе представлен очень важный класс Spring Boot Web: WebMvcConfigurer. Иногда нам нужно настроить Handler, Interceptor, ViewResolver и MessageConverter для реализации специальных функций веб-конфигурации, а пользовательскую конфигурацию проекта можно реализовать через интерфейс WebMvcConfigurer.

1. Введение в WebMvcConfigurer

В Spring Boot версии 1.5 пользовательские перехватчики, преобразователи сообщений и т. д. добавляются путем перезаписи метода WebMvcConfigurerAdapter. После Spring Boot 2.0 этот класс помечен как @Deprecated (устаревший). Официальная рекомендация — напрямую реализовать интерфейс WebMvcConfigurer или напрямую наследовать класс WebMvcConfigurationSupport.

Класс конфигурации WebMvcConfigurer на самом деле является методом конфигурации внутри Spring.Он использует форму JavaBean вместо традиционной формы файла конфигурации XML для настройки фрейма.Вы можете настроить Handler, Interceptor, ViewResolver и MessageConverter. Конфигурация Spring MVC на основе метода на основе Java требует создания класса конфигурации и реализации интерфейса WebMvcConfigurer.

2. Междоменный доступ

Из соображений безопасности браузеры запрещают доступ Ajax к адресам в разных доменах, а в сегодняшнюю эпоху безудержного распространения микросервисов междоменный доступ очень распространен. Это требует, чтобы прикладная система не только обеспечивала безопасность системы, но и обеспечивала поддержку внешнего междоменного доступа. Поэтому W3C предложил спецификацию междоменного доступа CORS (Cross-Origin-Resource-Sharing), которая поддерживается основными браузерами.

Spring Boot может решать междоменные проблемы на основе CORS. CORS — это механизм, который сообщает фону, с какой стороны (происхождения) запрос может получить доступ к данным сервера. Метод addCorsMappings() в конфигурационном классе WebMvcConfigurer представляет собой интерфейс, специально созданный разработчиками для решения междоменных задач. Параметром построения является CorsRegistry. Пример кода выглядит следующим образом:

    @Override
    public void addCorsMappings(CorsRegistry registry) {
    
    
        super.addCorsMappings(registry);
        registry.addMapping("/cors/**")
                .allowedHeaders("*")
                .allowedMethods("POST", "GET", "DELETE", "PUT")
                .allowedOrigins("*");
    }

Как видно из приведенного выше примера кода, установка для pathPattern значения /** означает, что вся система поддерживает междоменный доступ. Конечно, поведение доступа также можно настроить в соответствии с различными путями проекта. CorsRegistry предоставляет атрибут Registrations и устанавливает междоменный доступ для определенных путей с помощью метода getCorsConfigurations().

3. Конфигурация преобразования данных

Spring Boot поддерживает преобразование запрошенных или возвращаемых типов данных и обычно используется для автоматического унифицированного форматирования возвращаемых данных даты. Конфигурация выглядит следующим образом:

    @Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
    
    
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        converter.setObjectMapper(mapper);
        return converter;
    }
    //添加转换器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters)    {
    
    
    //将我们定义的时间格式转换器添加到转换器列表中
    //这样jackson格式化时但凡遇到Date类型就会转换成我们定义的格式
    converters.add(jackson2HttpMessageConverter());
    }

В приведенном выше примере сначала создайте преобразователь формата времени MessageConverter, который установит формат времени «гггг-ММ-дд ЧЧ:мм:сс», а затем метод configureMessageConverters добавит преобразователь в систему. Таким образом, когда данные JSON форматируются, тип времени единообразно преобразуется в формат, который мы определили.

4. Статические ресурсы

В процессе разработки веб-приложений необходимо обращаться к большому количеству статических ресурсов, таких как JS, CSS и изображения. По умолчанию Spring Boot предоставляет статические ресурсы в пути к классам.Правила имени каталога следующие:
/static
/public
/resources
/META-INF/
resources это в этом месте Изображение с именем файла xx.jpg. После запуска программы посетите http://localhost:8080/xx.jpg, чтобы получить доступ к изображению без дополнительной настройки.

Spring Boot также поддерживает настройку каталога статических ресурсов. Если вам нужно настроить каталог сопоставления статических ресурсов, просто перепишите метод addResourceHandlers(). Пример кода выглядит следующим образом:

 	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
    
    
        // 处理静态资源,例如图片、JS、CSS等
        registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
    }

В приведенном выше примере созданный класс webconfig наследуется от класса WebMvcConfigure, переписывает метод addResourceHandler(), добавляет путь сопоставления через addResourceHandler, а затем указывает путь через addResourceLocations.

addResourceLocations относится к каталогу, в котором размещены файлы.

addResoureHandler относится к пути доступа, доступному для внешнего мира.

5. Перейти на указанную страницу

При написании Spring MVC ранее, если вам нужно получить доступ к странице, вы должны написать метод перехода к странице в классе Controller. Spring Boot переписывает метод addViewControllers() в WebMvcConfigurer для достижения того же эффекта. Пример кода выглядит следующим образом:

	@Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        super.addViewControllers(registry);
        registry.addViewController("/").setViewName("/index");
        // 实现一个请求到视图的映射,无须编写controlLer
        registry.addViewController("/login").setViewName("forward:/index.html");
    }

Стоит отметить, что переписывание здесь метода addViewControllers() не переопределит addViewControllers в WebMvcAutoConfiguration (в этом методе Spring Boot сопоставляет «/» с index.html), а это означает, что наша собственная конфигурация и автоматическая конфигурация Spring Boot работают на в то же время, поэтому рекомендуется добавить собственную конфигурацию MVC.

Guess you like

Origin blog.csdn.net/weixin_45627039/article/details/131937844