`
TRAMP_ZZY
  • 浏览: 131666 次
社区版块
存档分类
最新评论

Spring MVC 4.X ResponseBody 日期类型Json 处理

阅读更多

方法一:全局处理

<mvc:annotation-driven>
	<!-- 处理responseBody 里面日期类型 -->
		<mvc:message-converters>
			<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
				<property name="objectMapper">
					<bean class="com.fasterxml.jackson.databind.ObjectMapper">
						<property name="dateFormat">
							<bean class="java.text.SimpleDateFormat">
								<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
							</bean>
						</property>
					</bean>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>



方法二:局部注解处理

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

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

/** 
 * ClassName:DateJsonSerializer <br/> 
 * Function: 日期类型格式化,格式化为:yyyy-MM-dd HH:mm:ss 格式. 用法如下:<br/> 
 * Reason:   @JsonSerialize(using=DateJsonSerializer.class)
 *			 @Column(name="BIRTHDAY")
 *		     public Date getBirthday() {
 *   			return birthday;
 *			 }
 *			. <br/> 
 * Date:     2014年7月10日 下午1:26:08 <br/> 
 * @author   zhangzhaoyu 
 * @version   1.0
 * @since    JDK 1.7 
 * @see       
 */
public class DateJsonSerializer extends JsonSerializer<Date> {

	@Override
	public void serialize(Date value, JsonGenerator jgen,
			SerializerProvider provider) throws IOException,
			JsonProcessingException {
		 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		 String formattedDate = formatter.format(value);
		 jgen.writeString(formattedDate);
	}

}


方法三:jackson 注解处理

@JsonIgnoreProperties
         此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JsonIgnore
         此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。

@JsonFormat
        此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")

@JsonSerialize

 // 反序列化一个固定格式的Date  
    @JsonDeserialize(using = CustomDateDeserialize.class)  
    public void setBirthday(Date birthday) {  
        this.birthday = birthday;  
    } 

 // 序列化指定格式的double格式  
    @JsonSerialize(using = CustomDoubleSerialize.class)  
    public double getSalary() {  
        return salary;  
    }  

public class CustomDateDeserialize extends JsonDeserializer<Date> {  
  
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  
    @Override  
    public Date deserialize(JsonParser jp, DeserializationContext ctxt)  
            throws IOException, JsonProcessingException {  
  
        Date date = null;  
        try {  
            date = sdf.parse(jp.getText());  
        } catch (ParseException e) {  
            e.printStackTrace();  
        }  
        return date;  
    }  
} 
分享到:
评论
3 楼 xlaohe1 2015-07-24  
controller返回的是一个POJO对象,然后用@ResponseBody可以把里面的日期转换为yyyy-MM-dd HH:mm:ss的吗?
<property name="objectMapper"> 
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 
                        <property name="dateFormat"> 
                            <bean class="java.text.SimpleDateFormat"> 
                                <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> 
                            </bean> 
                        </property> 
                    </bean> 
                </property> 
下周去试试你的这种方式。
今天我也和这种差不多的方式,但是都失败了,日期格式都是变成了Long。
一是:<property name="dateFormat"><bean class="com.package.CustomDateFormat" /></...>
其中,CustomDateFormat是一个继承自SimpleDateFormat的类。但是失败了。
二是:<property name="objMapper"><bean class="com.package.CustomJsonObjectMapper" /></...>
和上一种差不多,里面的CustomJsonObjectMapper也是继承ObjectMapper的,里面setDateformat,但是也失败了。
2 楼 TRAMP_ZZY 2015-05-24  
能帮到你,我也很高兴。
1 楼 jobzjc 2015-04-05  
第一段有帮到我。如果是非对象,Object方式传递的时候,第一种方式可以正确格式化日期。

相关推荐

Global site tag (gtag.js) - Google Analytics