SpringMVC配置javaConfig及MessageConverter

SpringMVC配置javaConfig及StringHttpMessageConverter

配置Spring的轉換器,在xml中配置以下

<mvc:annotation-driven>  
    <mvc:message-converters>  
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">  
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/plain;charset=UTF-8</value>  
                    <value>text/html;charset=UTF-8</value>  
                </list>  
            </property>  
        </bean>
    </mvc:message-converters>  
</mvc:annotation-driven>

在javaConfig中的配置以下

web.xml 3.0後能夠直接使用,在 Servlet 3.0環境
中, 容器會在類路徑中查找實現
javax.servlet.ServletContainerInitializer接口的類,
若是能發現的話, 就會用它來配置 Servlet容器。 Spring提供了這個接口的實現, 名
SpringServletContainerInitializer, 這個類反過來又會
查找實現 WebApplicationInitializer的類並將配置的任務交給
它們來完成。咱們的 SpittrWebAppInitializer擴展了
AbstractAnnotationConfig DispatcherServletInitializer(同時也就實現了
WebApplicationInitializer) , 所以當部署到 Servlet 3.0容器
中的時候, 容器會自動發現它, 並用它來配置 Servlet上下文。
public class SplittrWebAppInitianlizer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // 若是隻是簡單的一個web程序,可忽略
        return new Class<?>[] { RootConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // 配置WebConfig,主要是初始化bean等,至關於加載applicationContext.xml文件
        return new Class<?>[] { WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        // 處理請求的路徑
        return new String[] { "/" };
    }

}

WebConfig.java

@Configuration
@EnableWebMvc // 啓用SpringMVC
@ComponentScan("com.spring02") // 啓動組件掃描
public class WebConfig extends WebMvcConfigurerAdapter {

    // 配置視圖解析器
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    // 配置處理靜態資源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    // 設置MessageConverter
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 添加一個String處理起
        converters.add(stringHttpMessageConverter());
    }

    // 設置默認編碼爲UTF-8
    private Charset default_charset = Charset.forName("UTF-8");

    @Bean
    public StringHttpMessageConverter stringHttpMessageConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter(default_charset);
        List<MediaType> list = buildDefaultMediaTypes();
        converter.setSupportedMediaTypes(list);
        return converter;
    }

    // 設置響應頭信息
    private static List<MediaType> buildDefaultMediaTypes() {
        List<MediaType> list = new ArrayList<>();
        list.add(MediaType.TEXT_HTML); // 這個必須設置在第一位
        list.add(MediaType.APPLICATION_JSON_UTF8);
        return list;
    }
}

說明:html

  1. @EnableWebMvc就想當於<mvc:annotation-driven />
  2. 須要重寫WebMvcConfigurerAdapter中的configureMessageConverters方法,在該方法中會傳遞converters,經過converters去添加處理器converters.add(處理器轉換方法)
相關文章
相關標籤/搜索