2

我在 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 实现

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

1 回答 1

4

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

你的吸气剂将看起来像这样(其中 JsonDateSerializer 是自定义类)

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

查看包含序列化程序代码的这篇博客文章。序列化程序代码在此处复制,但博客文章中的解释可能会有所帮助。

/**
 * 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);
    }
}
于 2013-01-14T17:12:53.813 回答