1. 程式人生 > >SpringMVC--配置FastJSON為JSON處理器

SpringMVC--配置FastJSON為JSON處理器

springMVC使用fastJson很簡單,在springMVC的配置檔案中作如下配置:

<!-- 啟用預設配置 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 配置Fastjson支援 -->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json</value>
                    </list>
                </property>
                <property name="features">
                    <list>
                        <value>WriteMapNullValue</value>
                        <value>QuoteFieldNames</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

或者通過註解直接注入FastJsonHttpMessageConverter,通過@Bean注入HandlerAdapter來注入FastJsonHttpMessageConverter,有關HttpMessageConverter相關的知識可以參考springMVC原始碼分析--HttpMessageConverter寫write操作(三)springMVC原始碼分析--HttpMessageConverter引數read操作(二)
@Configuration
public class FastJSONMessageConverter {
	
	@Bean
	public HandlerAdapter handlerAdapter(WebBindingInitializer webBindingInitializer){
		
		List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
		//注入FastJSON
		FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
		List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
		supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
		supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
		supportedMediaTypes.add(MediaType.TEXT_HTML);
		fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes );
		messageConverters.add(fastJsonHttpMessageConverter);
		RequestMappingHandlerAdapter requestMappingHandlerAdapter = new RequestMappingHandlerAdapter();
		//引數及返回值處理
		requestMappingHandlerAdapter.setMessageConverters(messageConverters);
		//引數校驗
		requestMappingHandlerAdapter.setWebBindingInitializer(webBindingInitializer);
		return requestMappingHandlerAdapter;
	}
}
Fastjson的SerializerFeature序列化屬性: 
QuoteFieldNames———-輸出key時是否使用雙引號,預設為true 
WriteMapNullValue——–是否輸出值為null的欄位,預設為false 
WriteNullNumberAsZero—-數值欄位如果為null,輸出為0,而非null 
WriteNullListAsEmpty—–List欄位如果為null,輸出為[],而非null 
WriteNullStringAsEmpty—字元型別欄位如果為null,輸出為”“,而非null 
WriteNullBooleanAsFalse–Boolean欄位如果為null,輸出為false,而非null
別忘了新增Fastjson的包,如果使用Maven,版本可以切換至最新版本,可使用如下設定
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.37</version>
</dependency>
示例:
@Controller
@RequestMapping("/test")
public class TestController {

	@RequestMapping("/json")
	@ResponseBody
	public List<String> test(){
		List<String> list = new ArrayList<String>();
		list.add("1");
		list.add("2");
		list.add("sdsd");
		list.add("asdads");
		return list;
	}
}
瀏覽器輸出:

["1","2","sdsd","asdads"]