当我尝试在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,...}
有人可以解释一下如何让它发挥作用吗?
祝你好运, 卢卡斯
答案 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));
然后你可以将它包装好以备将来使用。