Spring Data Rest中的java.util.Date

时间:2013-01-14 17:06:54

标签: java spring

我在spring(3.1)数据REST中使用java.util.Date。如何以人类可读的形式打印日期? (例如MM / DD / YYYY)?

@Entity
public class MyEntity{
...

@Column(name="A_DATE_COLUMN")
@DateTimeFormat(iso=ISO.DATE)
private Date aDate;

..getters and setters

}

然而,当我打印我的实体时(在覆盖toString之后),我总是把日期作为一个长期。似乎@DateTimeFormat不会改变行为。我也尝试了不同的iso格式,但也没有帮助。

"aDate" : 1320130800000

这是我的弹簧数据休息的POM文件条目

<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-webmvc</artifactId>
            <version>1.0.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId></groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>

                <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.1</version>
        </dependency>

任何帮助都很明确。 PS。这是toString Implementation

@Override
    public String toString() {
        return getClass().getName() + "{"+
                 "\n\taDate: " + aDate
                                       + "\n}";
    }

1 个答案:

答案 0 :(得分:4)

看起来你需要编写一个自定义序列化程序来使Jackson(JSON库spring在引擎盖下使用)正确地将日期序列化为文本。

你的getter看起来像这样(JsonDateSerializer是自定义类)

@JsonSerialize(using=JsonDateSerializer.class) 
public Date getDate() {     
   return date; 
} 

查看包含序列化程序代码的this blog post。序列化程序代码在这里复制,但博客文章中的解释可能有所帮助。

/**
 * Used to serialize Java.util.Date, which is not a common JSON
 * type, so we have to create a custom serialize method;.
 */
@Component
public class JsonDateSerializer extends JsonSerializer<Date>{

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        String formattedDate = dateFormat.format(date);

        gen.writeString(formattedDate);
    }
}