Spring REST - ошибка @createdDate в абстрактном суперклассе

У меня проблемы с 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 ответа

Решение

Спасибо за поддержку.

исключительно я не испортил! В настоящее время я работаю с Spring boot 2.0.0.M2. Я обновил до 2.0.0.M3, и он просто работает.

Я коротко заглянул в репо, но ничего не нашел нас.

Решение:

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

Надо было проверить это раньше, так как это как-то ожидается при работе с этими версиями!

В классе AbstractPersistentObjectпеременная экземпляра createdDate объявляется публично, тогда как геттер и сеттер объявляются защищенными. Попробуйте поменять местами доступ, чтобы получатель и установщик были общедоступными, а переменная экземпляра защищенной (или закрытой).

Попробуйте использовать @CreatedDate из пакета: org.springframework.data.annotation.CreatedDate

Другие вопросы по тегам