【问题标题】:Custom DateTime format in Spring Data ProjectionSpring Data Projection 中的自定义 DateTime 格式
【发布时间】:2017-03-20 22:52:54
【问题描述】:

我有一个内联一些关系字段的弹簧数据投影。应用投影时,日期时间字段不再输出为 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() 属性,但它不会更改输出的日期格式。

有什么想法吗?

谢谢 最大

【问题讨论】:

  • 很高兴看看 Dean Clark 的回答是否有效(我怀疑)。但是你可以使用jackson并创建一个组件并使用json反序列化(stackoverflow.com/a/38186623/3003337)。
  • 为什么在投影中使用String作为数据类型?

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


【解决方案1】:

正如 Jens Schauder 在他们的评论中所指出的,我不小心将投影中 getDateTime() 的类型设置为字符串,而不是日期。这可能会以与 spring 默认(iso8601)不同的格式进行隐式 toString 转换。

当我从以下位置更改投影时:

String getDateTime()

到:

Date getDateTime()

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

【讨论】:

    【解决方案2】:

    尝试@DateTimeFormat(pattern = "yyyy") 而不是YYYY

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2016-01-22
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      相关资源
      最近更新 更多