将ZonedDateTime从Dropwizard保存到MySQL的问题

时间:2016-06-28 09:06:06

标签: java mysql datetime serialization dropwizard

我正在使用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的新手。

建议表示赞赏 - 谢谢。

1 个答案:

答案 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

此致

阿图尔