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

时间:2013-12-11 17:28:40

标签: json playframework playframework-2.0 ebean

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

ok(Json.toJson(userObj));

我的代码示例:

@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;
...
}

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

Json的结果是:

{"id":202,"last_login":1386775797494,...}

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

祝你好运, 卢卡斯

2 个答案:

答案 0 :(得分: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);
    }
}
模型中的

和注释字段:

@JsonSerialize(using = JsonDateSerializer.class)
public Date last_login;

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

2. @ JsonFormat

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

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

答案 1 :(得分:0)

Json.toJson(object)使用接受Mapper的Jackson,在你的情况下答案是:

    ObjectMapper mapper = new ObjectMapper();
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    mapper.setDateFormat(outputFormat);
    Json.setObjectMapper(mapper);   
    return ok(Json.toJson(object));

然后你可以将它包装好以备将来使用。