创建 ContentNegotiatingViewResolver
package spittr.config;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.BeanNameViewResolver;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
/**
* web的控制config
*
* @ClassName WebConfig
* @Description TODO
* @author dong.tl
* @date 2017年4月15日 下午2:00:13
*
*/
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "spittr.web", useDefaultFilters = false, includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class),
@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = ControllerAdvice.class)})
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
*
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(mappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}
/**
* json信息转换器
* @author dong.tl
* @date 2017年4月28日 下午3:29:04
* @return
*/
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
// 主要针对 IE返回json为下载的问题
List<MediaType> jsonSupportedMediaTypes = new ArrayList<MediaType>();
jsonSupportedMediaTypes.add(MediaType.TEXT_PLAIN);
// 定义json解析器的返回类型
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setDefaultCharset(Charset.forName("utf-8"));
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(jsonSupportedMediaTypes);
return mappingJackson2HttpMessageConverter;
}
/**
* 声明ContentNegotiatingViewResolver
* @author dong.tl
* @date 2017年4月28日 下午3:35:09
* @param cnm
* @return
*/
@Bean
public ViewResolver cnViewResolver(ContentNegotiationManager cnm) {
ContentNegotiatingViewResolver cnvr = new ContentNegotiatingViewResolver();
cnvr.setContentNegotiationManager(cnm);
return cnvr;
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
// configurer.ignoreAcceptHeader(true);
configurer.defaultContentType(MediaType.TEXT_HTML);
Map<String, MediaType> mediaTypes = new HashMap<String, MediaType>();
mediaTypes.put("json", MediaType.TEXT_PLAIN);
mediaTypes.put("htm", MediaType.TEXT_HTML);
configurer.mediaTypes(mediaTypes );
}
/**
* 以bean的形式查找视图
* @author dong.tl
* @date 2017年4月28日 下午3:29:42
* @return
*/
@Bean
public ViewResolver beanNameViewResolver() {
return new BeanNameViewResolver();
}
/**
* 将"json" 定义为JSON的视图
* @author dong.tl
* @date 2017年4月28日 下午3:30:57
* @return
*/
@Bean
public View json() {
MappingJackson2JsonView mappingJackson2JsonView = new MappingJackson2JsonView();
mappingJackson2JsonView.setContentType(MediaType.TEXT_PLAIN_VALUE);
return mappingJackson2JsonView;
}
}