在Json.toJson()之后播放ebean的Date字段格式

sli*_*kas 2 json playframework ebean playframework-2.0

当我试图在Controller方法结果中返回JSON时,我在Ebean模型中正确格式化日期字段时遇到问题

ok(Json.toJson(userObj));
Run Code Online (Sandbox Code Playgroud)

我的代码示例:

@Entity
@Table(name = "user")
public class User extends Model {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
    public Integer id;

    @Formats.DateTime(pattern = "yyyy-MM-dd hh:mm:ss")
    public Date last_login;
...
}
Run Code Online (Sandbox Code Playgroud)

表位于postgresql数据库中 - 字段last_login是时间戳.

Json的结果是:

{"id":202,"last_login":1386775797494,...}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下如何让它发挥作用吗?

最好的问候,卢卡斯

sli*_*kas 8

在互联网上搜索后,我找到了两个解决方案:

1.创建自定义序列化程序,如:

JsonDateSerializer类:

public class JsonDateSerializer extends JsonSerializer<Date> {
    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    @Override
    public void serialize(
            Date date, JsonGenerator jgen, SerializerProvider provider) throws IOException {

        String formattedDate = dateFormat.format(date);
        jgen.writeString(formattedDate);
    }
}
Run Code Online (Sandbox Code Playgroud)

模型中的注释和注释字段:

@JsonSerialize(using = JsonDateSerializer.class)
public Date last_login;
Run Code Online (Sandbox Code Playgroud)

此解决方案不灵活,因为您无法在@JsonSerialize注释中添加带日期格式的第二个参数,因此如果您想要几个日期格式,则必须创建下一个序列化类.

2. @ JsonFormat

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss")
Run Code Online (Sandbox Code Playgroud)

在这里,您可以在注释中定义模式,因此在我的情况下更灵活.