2017-03-20 45 views
1

我有一個彈出數據投影,用於內聯一些關係字段。當應用投影時,日期時間字段不再以iso8601的形式輸出(就像它們沒有投影一樣),而是以另一種格式輸出。Spring Data Projection中的自定義日期時間格式

如何使投影格式的日期時間爲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()屬性,但它不會改變輸出的日期格式。

任何想法?

感謝 最大

+0

很高興看到Dean Clark的答案能否奏效(我懷疑)。但是你可以使用jackson並創建一個組件並使用json反序列化(http://stackoverflow.com/a/38186623/3003337)。 – surya

+1

爲什麼在投影中使用String作爲數據類型? –

回答

1

正如Jens Schauder在他們的評論中指出的那樣,我不小心將投影中的getDateTime()的類型設置爲String,而不是Date。這大概做了一個隱式的toString轉換,其格式與Spring默認的(iso8601)不同。

當我改變了投影:

String getDateTime() 

到:

Date getDateTime() 

它格式化的日期,如應用程序的其餘ISO8601。

謝謝大家!

0

嘗試@DateTimeFormat(pattern = "yyyy"),而不是YYYY