Spring Data Projection中的自定义DateTime格式

时间:2017-03-20 22:52:54

标签: java spring datetime spring-data spring-data-jpa

我有一个弹簧数据投影,内联一些关系字段。当应用投影时,日期时间字段不再作为iso8601输出(就像它们没有投影一样),而是以另一种格式输出。

如何将我的投影格式设为ISO8601的日期时间?这是我目前的预测:

package io.cocept.model.projection;

import io.cocept.model.Meeting;
import io.cocept.model.User;
import org.springframework.data.rest.core.config.Projection;
import org.springframework.format.annotation.DateTimeFormat;

@Projection(name = "inlineUsers", types = { Meeting.class })
public interface MeetingInlineUsersProjection {

    String getAddress();
    String getDateTime();    
    String getMessage();

    User getOwner();
    User getInvitee();

}

和我的会议班:

package io.cocept.model;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;

@Entity
public class Meeting extends BaseEntity {

    private User owner;
    private User invitee;
    private String address;
    private Date dateTime;
    private String message;

    public Meeting() {

    }


    @ManyToOne
    @NotNull
    @JoinColumn(name = "owner_id")
    public User getOwner() {
        return owner;
    }
    public void setOwner(User owner) {
        this.owner = owner;
    }

    @ManyToOne
    @NotNull
    @JoinColumn(name = "invitee_id")
    public User getInvitee(){
        return invitee;
    }
    public void setInvitee(User invitee){
        this.invitee = invitee;
    }

    @NotNull
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    @NotNull
    public Date getDateTime() {
        return dateTime;
    }
    public void setDateTime(Date dateTime) {
        this.dateTime = dateTime;
    }

    public String getMessage(){ return message; }
    public void setMessage(String message){ this.message = message; }

}

我尝试将装饰器@DateTimeFormat(pattern = "YYYY")添加到getDateTime()属性,但它不会更改输出的日期格式。

有什么想法吗?

由于 最大

2 个答案:

答案 0 :(得分:1)

正如Jens Schauder在评论中指出的那样,我不小心将投影中的getDateTime()类型设置为String,而不是Date。这可能是以与spring默认值(iso8601)不同的格式进行隐式toString转换。

当我改变投影时:

String getDateTime()

为:

Date getDateTime()

它将日期格式化为ISO8601,就像应用程序的其余部分一样。

全部谢谢!

答案 1 :(得分:0)

尝试使用@DateTimeFormat(pattern = "yyyy")代替YYYY