2017-03-20 11 views
1

私は、いくつかのリレーショナルフィールドをインライン化するスプリングデータ投影法を持っています。投影が適用されると、日時フィールドはiso8601として出力されなくなり(投影されていないように)、代わりに別の形式で出力されます。Spring Data ProjectionのカスタムDateTime形式

私の投影形式を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; } 

} 

私はgetDateTime()プロパティにデコレータ@DateTimeFormat(pattern = "YYYY")を追加しようとしましたが、それは出力された日付形式を変更しません。

アイデア?

おかげ マックス

+0

Dean Clarkの回答がうまくいくかどうかは分かります(私は疑います)。しかし、あなたはjacksonを使用してコンポーネントを作成し、json deserialization(http://stackoverflow.com/a/38186623/3003337)を使用することができます。 – surya

+1

なぜ投影法でStringをデータ型として使用していますか? –

答えて

1

彼らのコメントでJens Schauderが指摘したように、私は誤ってDateとは違って、投影のgetDateTime()の型をStringとして設定していました。これはおそらく、春のデフォルト(iso8601)とは異なる形式の暗黙のtoString変換を行いました。それは、アプリケーションの残りの部分のようなISO8601のように日付をフォーマット

Date getDateTime() 

:に

String getDateTime() 

:Iから投影を変更

ありがとうございます!

0

@DateTimeFormat(pattern = "yyyy")の代わりYYYYを試してみてください。