2017-08-13 70 views
1

我對Spring REST(新增功能)有麻煩。Spring REST - 抽象超類中的@createdDate拋出錯誤

我的意圖是擁有一個Abstract-Super-Class,它具有一些常用字段,如ID/Version/CreatedDate等等。 它與JPA和數據庫明智地工作得很好。但是,當我試圖揭露一個存儲庫的兒童PagingAndSortingRepository我得到以下錯誤,一旦我查詢api。

其他領域的工作很好。它對應於@CreatedDate註釋。

錯誤:

Resolved exception caused by Handler execution:   
org.springframework.http.converter.HttpMessageNotWritableException: 
Could not write JSON: java.sql.Date cannot be cast to java.lang.String; 
nested exception is com.fasterxml.jackson.databind.JsonMappingException: 
java.sql.Date cannot be cast to java.lang.String (through reference chain: 
org.springframework.hateoas.PagedResources["_embedded"]- 
java.util.Collections$UnmodifiableMap["users"]->java.util.ArrayList[0]org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module$PersistentEntityResourceSerializer$1["content"]->com.*.*.domain.User["createdDate"]) 

超:

@MappedSuperclass 
@EntityListeners(AuditingEntityListener.class) 
public abstract class AbstractPersistentObject 
    implements PersistentObject, Serializable { 

@Id 
@GeneratedValue(strategy= GenerationType.AUTO) 
protected Long id; 
protected Integer version; 

@org.springframework.data.annotation.CreatedDate 
@Temporal(TemporalType.DATE) 
public Date createdDate; 

... getter/setter/constructor 

protected Date getCreatedDate() { 
    return createdDate; 
} 

protected void setCreatedDate(Date createdDate) { 
    this.createdDate = createdDate; 
} 

舉例子:

@Entity 
@Table(name = "UserTable") 
public class User extends AbstractPersistentObject { 

private String firstName; 
private String lastName; 

@NotNull 
@Column(unique = true) 
private String email; 
@JsonIgnore 
private String password; 

private boolean verified; 
... 

解決方案:從包裝

Upgrading Spring Boot from 2.0.0.M2 to 2.0.0.M3. 
+0

該錯誤指示數據類型轉換問題。請從'AbstractPersistentObject'包含'createdDate'的getter和setter。 – Kirby

+0

我包括該字段的getter setter。 Thx回覆 – Hannes

+0

您的項目中是否有註解'@ EnableJpaAuditing'? – Kirby

回答

0

感謝您的支持。

格外我沒弄髒!我目前使用Spring引導2.0.0.M2。我更新到2.0.0.M3,它只是工作。

我很快查看了回購協議,但沒有找到任何關於我們的信息。

解決方案:

Upgrading Spring Boot from 2.0.0.M2 to 2.0.0.M3. 

應該檢查這早些時候,因爲這個版本的工作時,它是某種期待!

+1

很高興知道您解決了這個問題。對我沒有要求版本信息感到羞恥。我只是假設你使用的是穩定版本而不是里程碑版本。 – Kirby

+0

是的 - 我應該首先提到這一點。它只是一個學習目的的項目,所以我認爲它會很好...... :) – Hannes

-1

嘗試使用@CreatedDate:org.springframework.data.annotation.CreatedDate

+0

我檢查過它。可悲的是它是正確的,但我沒有確定之前^^ – Hannes

0

AbstractPersistentObject類,實例變量createdDate聲明公共而getter和setter聲明保護。嘗試反向訪問,以便獲取者和設置者爲public,實例變量爲保護(或私有)。

+0

是的,我已經與thoose玩了。感謝您的回覆,我通過升級Spring Boot解決了這個問題。 – Hannes