我在使用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.
答案 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