<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>
在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[] { "/" }; } }
@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
<mvc:annotation-driven />
WebMvcConfigurerAdapter
中的configureMessageConverters
方法,在该方法中会传递converters
,经过converters
去添加处理器converters.add(处理器转换方法)
。