我正在使用dropwizard 0.9.3
在MySQL上创建一个简单的REST API(使用Hibernate和Jackson - 使用Java 8)。
尝试将UTC DateTime值从应用程序层保存到MySQL timestamp
列时遇到问题 - 虽然应用程序似乎处理得很好,但db中出现的值是{{ 1}},所以我猜测正确序列化值的方式。
我的实体看起来像这样:
BLOB
相应的DAO是:
@Entity
@Table(name = "users")
public class User {
@Id @NotNull @JsonProperty
private String id;
@JsonProperty @NotNull
@Column(name="name", nullable=false)
private String name;
@JsonProperty @NotNull
@Column(name="email", nullable=false)
private String email;
@JsonIgnore @JsonProperty @NotNull
@Column(name="createdAt", nullable = false)
private ZonedDateTime createdAt;
// default constructor
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
// get the current UTC timestamp
this.createdAt = ZonedDateTime.now(ZoneOffset.UTC);
}
}
资源是:
public class UserDAO extends AbstractDAO<User> {
public UserDAO(SessionFactory factory) {
super(factory);
}
public User create(User user) {
return persist(user);
}
}
使用简单@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UsersResource {
private final UserDAO dao;
public UsersResource(UserDAO dao) {
this.dao = dao;
}
@PUT
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@UnitOfWork
public User create(
@FormParam("name") String firstName,
@FormParam("email") String email
) {
User user = new User(name, email);
return dao.create(user);
}
}
对其进行测试,但curl
会保存到时间戳所在的数据库中(例如显示BLOB
之类的值)。
我尝试遵循DW约定,使用相当传统的引导程序(和2016-06-28 10:05:22
包)。我不确定我在这里错过了什么,但我也是DW和Java的新手。
建议表示赞赏 - 谢谢。
答案 0 :(得分:0)
DW正在使用hibernate 5 +
对于Hibernate支持java时间类型,您需要包含此依赖项:(替换为特定版本)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>5.0.0.Final</version>
</dependency>
注意:虽然这不会保存到时间戳类型。使用MySQL进行测试,它会保存到日期时间类型。
(取自:Java 8 LocalDateTime and Hibernate 4)
此致
阿图尔