Spring REST - 抽象超类中的@createdDate抛出错误

时间:2017-08-13 15:04:22

标签: java spring audit spring-rest

我在使用Spring REST时遇到了麻烦(新手)。

我的目的是拥有一个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.

3 个答案:

答案 0 :(得分:0)

在类AbstractPersistentObject中,实例变量createdDate被声明为 public ,而getter和setter被声明为 protected 。尝试撤消访问权限,以便getter和setter public ,实例变量 protected (或私有)。

答案 1 :(得分:0)

感谢您的支持。

特别是我没有搞砸!我目前使用的是Spring boot 2.0.0.M2。我更新到2.0.0.M3,它只是工作。

我很快调查了回购,但没有发现任何关于我们的事情。

<强>解决方案:

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

之前应该已经检查过了,因为在使用这个版本时它会以某种方式预期!

答案 2 :(得分:-1)

尝试使用包中的@CreatedDate:org.springframework.data.annotation.CreatedDate