当我尝试在 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,...}
有人可以解释一下如何让它发挥作用吗?
最诚挚的问候, 卢卡斯
最佳答案
在网上搜索后,我找到了两个解决方案:
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")
在这里您可以在注释中定义模式,因此在我的情况下更加灵活。
关于json - 在 Json.toJson() 之后 Play ebean 的 Date 字段格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20525942/