Подтвердить что ты не робот

Spring Data REST - POST новый объект с отношениями

Относится к: Spring Data Rest версии 2.0.2

Я пытаюсь выполнить POST сущность (адрес) с помощью @ManyToOne (вместо @OneToOne, как в примере) отношения к Person, как описано в: Вложенные ссылки Entity в сложных графах объектов, но я получаю ошибку Джексона:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: (was java.lang.NullPointerException) (through reference chain: Address["person"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: Address["person"])
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228) ~[spring-web-4.0.3.RELEASE.jar:4.0.3.RELEASE]

Мне странно, что я могу отправить объект JSON с rel и href в атрибут "person" адреса, например:

"person": {
    "rel" : "people.Person",
    "href" : "http://localhost:8080/people/1"
}

Это все еще актуально? Эта страница довольно старая (2012). Есть ли обновленные документы. Я просмотрел справочный документ даже для последних (на сегодняшний день) 2.1.0 RC1, но мне это не хватает.

Любой указатель будет оценен.

Stackoverflow предложил мне увидеть этот вопрос, который в моем случае не работает с HTTP-статусом 405 - метод запроса "POST" не поддерживается... что, вероятно, проблема с конфигурацией, но мой оригинальный вопрос стоит.

Обновление 1. Из раздела 4.1 справочного документа в нем говорится:

Иногда поведение Spring Data REST ObjectMapper, которое было специально настроено для использования интеллектуальных сериализаторов, которые могут превращать объекты домена в ссылки и обратно, может неправильно обрабатывать вашу модель домена. Существует так много способов структурировать ваши данные, что вы можете найти, что ваша собственная модель домена не переводится в JSON правильно. В некоторых случаях иногда бывает нецелесообразно пытаться поддерживать комплексную модель домена в общем виде. Иногда, в зависимости от сложности, даже не представляется возможным предложить общее решение.

Проблема может заключаться в том, что я использую пользовательский ObjectMapper Jackson с поддержкой Hibernate. Я попытаюсь копать дальше.

Обновление 2. Не обращайте внимания на обновление 1, я удалил Hibernate4Module, и поведение будет одинаковым.

4b9b3361

Ответ 1

Формат на странице, с которой вы связаны, устарел. Я только что обновил его. Правильный формат:

{
    "postalCode": "12345",
    "province": "MO",
    "lines": ["1 W 1st St."],
    "city": "Univille",
    "person": "http://localhost:8080/people/1"
}

По крайней мере, это то, что работает для меня с моими сущностями.