фона: Мое приложение построено на вершине Spring Data REST и MongoDB Хранилища.годМесяц поле хранится на MongoDB не может быть разобран обратно на объект поля
Рассмотрим этот простой объект домена Java с YearMonth
поле:
@Getter @Setter
public class Console {
@Id private String id;
private String name;
private YearMonth releaseMonth;
private Vendor vendor;
}
и этот объект домена становится доступным для персистенции по реализации MongoRepository:
public interface ConsoleRepository extends MongoRepository<Console, String> {
Console findByName(@Param("name") String name);
}
При экспонировании контроллера REST (автоматически по данным REST) для управления этим доменным объектом, я добавил зависимость gradle, чтобы анализировать значения YearMonth JSON (например: «2016-04») в это поле с помощью jackson:
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1'
Когда POST'ing к этой конечной точке, значение годМесяца, содержащееся в документе JSON правильно разобран в поле годМесяца и весь объект хранятся в виде документа на MongoDB успешно. Подняв этот документ на Монго доказывает, что:
> db.console.find()
{ "_id" : ObjectId("575f837ca75df1fc7e5f4f96"),
"_class" : "xxx.yyy.Console",
"name" : "Console 1",
"releaseMonth" : { "year" : 1988, "month" : 10 },
"vendor" : "VENDOR_1" }
Однако, когда я пытаюсь получить этот ресурс от контроллера REST, MongoDB клиент не связать это значение годМесяца в объект Java:
GET localhost:8080/consoles
Ответ:
{
"timestamp": 1465954648903,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.data.mapping.model.MappingException",
"message": "No property null found on entity class java.time.YearMonth to bind constructor parameter to!",
"path": "/consoles"
}
Я бы предположить, MongoDB Java клиент не хватает встроенной поддержки для значений годМесяц Java 8, но так как он в состоянии спасти их, что, кажется, исключено. Что мне здесь не хватает?
Я пробовал то же самое, и он не работал, поэтому я смотрю на дату и понял, что использую более новую версию, и это реактивно, и я даже использую Kotlin. Проблема была простой, используя DBObject вместо org.bson.Document. После исправления типа конвертер работал. Я просто хотел оставить это здесь, если раньше кто-то сделал такой конвертер и хотел перейти на новую версию. – unknown