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;
    }
}

说明:

  1. @EnableWebMvc就想当于<mvc:annotation-driven />
  2. 需要重写WebMvcConfigurerAdapter中的configureMessageConverters方法,在该方法中会传递converters,通过converters去添加处理器converters.add(处理器转换方法)
    原文作者:这个骑士不炸街
    原文地址: https://segmentfault.com/a/1190000015710469
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞