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