1. 程式人生 > >Spring中@ResponseBody 返回json字串date型別變成long型的問題

Spring中@ResponseBody 返回json字串date型別變成long型的問題

以前,關於返回json字串date型別變成long(時間戳)型別,一直存在困難,兩個方面,1,通過前端的格式轉化;2,同事date轉成string型別,再做傳值,如此既降低編碼效率又不利於全端開發人員的工作負擔。為此今天做如下總結;

第一步:設計組價

package edu.sjtu.nicman.web.controller.config;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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; import org.springframework.stereotype.Component
; @Component("customObjectMapper") public class CustomObjectMapper extends ObjectMapper { public CustomObjectMapper() { CustomSerializerFactory factory = new CustomSerializerFactory(); factory.addGenericMapping(Date.class, new JsonSerializer<Date>() { @Override public void serialize(Date arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException, JsonProcessingException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"
); arg1.writeString(sdf.format(arg0)); } }); this.setSerializerFactory(factory); } }

第二步:元件配置
以下是對json格式和date型別時間轉化的配置

<!-- 以下為SpringMVC配置 -->
    <mvc:annotation-driven>
        <!-- 返回json資料,@response使用 -->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper" ref="customObjectMapper"></property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

第三步:在需要轉換格式的欄位添加註解

    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date time0;