springMVC中自定義json中數據類型

網站開發中,大家經常使用ajax請求返回json數據到前臺給js使用,但是對於java中long類型的數據,如果通過json傳遞到前臺js中時,由於js的精度不夠,會造成long類型的數據丟失後面幾位。所以在返回前臺json數據時,我們需要把long類型的數據轉成string類型的數據,這樣就可以在js中丟失精度。還有java中Date類型的日期,我們需要返回json時,按照自己的日期格式就Date類型的數據轉成string類型數據傳遞給前臺,這就需要我們覆蓋實現jackson包中的ObjectMapper類,然後根據類型判斷,覆蓋父類中的默認處理方法,從而達到自己自定義實現方式。代碼如下

package com.jd.trial.common.json;

import java.io.IOException;
import java.util.Date;
import com.jd.trial.common.utils.DateTools;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.CustomSerializerFactory;

/**
 * 自定義處理json對象內數據格式
 *
 * @ClassName: JdObjectMapper
 * @author ***
 * @date 2014年12月18日 上午9:21:54
 *
 */
public class JdObjectMapper extends ObjectMapper {

	public JdObjectMapper() {
		CustomSerializerFactory factory = new CustomSerializerFactory();

		// 格式化日期
		factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {
			@Override
			public void serialize(Date value, JsonGenerator jsonGenerator,
					SerializerProvider provider) throws IOException,
					JsonProcessingException {
				jsonGenerator.writeString(DateTools.format(value));
			}
		});

		// Long轉換爲String
		factory.addGenericMapping(Long.class, new JsonSerializer<Long>() {
			@Override
			public void serialize(Long value, JsonGenerator jgen,
					SerializerProvider provider) throws IOException,
					JsonProcessingException {
				jgen.writeString(String.valueOf(value));
			}
		});

		this.setSerializerFactory(factory);
	}
}
自定義類實現完了,然後需要在spring-servlert.xml中進行註冊,方可生效,

 <!-- 處理json格式 -->
    <bean id="jdObjectMapper" class="com.jd.trial.common.json.JdObjectMapper"/>
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean
                    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper" ref="jdObjectMapper"></property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

通過以上兩步操作,即可實現返回json數據中的類型自定義處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章