2017-03-25 98 views
0

我用彈簧啓動與MySQL春天開機,傑克遜和LOCALDATE的

在我application.properties

spring.jpa.generate-ddl=true 
spring.jackson.serialization.write-dates-as-timestamps=false 

在我的build.gradle我有

compile('org.springframework.boot:spring-boot-starter-data-jpa') 
compile('org.springframework.boot:spring-boot-starter-data-rest') 
compile('org.springframework.boot:spring-boot-starter-web') 
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' 

在我的java類

import java.time.LocalDate;

@Entity 
public class WebSite implements Serializable{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long webSiteId; 

    private LocalDate date; 
    ... 
} 

在創建該表,

日期字段創建像TINYBLOB

爲什麼不是日期

回答

1

這不是傑克遜的問題,而是不管你正在使用ORM不知道如何將Java LocalDate轉換爲MySQL日期。

有兩種方法可以做到這一點。如果你使用Hibernate,你只需在你的依賴中包含org.hibernate:hibernate-java8

或者,如果您只想使用JPA,則需要創建屬性轉換器。例如:

@Converter(autoApply = true) 
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> { 

    @Override 
    public Date convertToDatabaseColumn(LocalDate locDate) { 
     return (locDate == null ? null : Date.valueOf(locDate)); 
    } 

    @Override 
    public LocalDate convertToEntityAttribute(Date sqlDate) { 
     return (sqlDate == null ? null : sqlDate.toLocalDate()); 
    } 
} 

屬性轉換器將處理Java LocalDate和MySQL Date之間的轉換。

參見:http://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/