为了在 Scala 中重新创建Spring Data Neo4j 官方电影示例,我在 Spring Data Neo4j 层上遇到了 jsonifying 的问题。
README
本示例项目中记录了详细信息。
启动 Spring 应用程序并点击/movies/<id>
会给出以下堆栈跟踪:
018-03-27 15:33:23 WARN DefaultHandlerExceptionResolver:442 - 无法写入 HTTP 消息:org.springframework.http.converter.HttpMessageNotWritableException:无法写入 JSON:movies.Movie 的无效对象 ID 定义:找不到具有名称的属性'ID'; 嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:movies.Movie 的无效对象 ID 定义:找不到名称为“id”的属性(通过参考链:org.springframework.hateoas.PagedResources["_embedded"]->java .util.Collections$UnmodifiableMap["movies"]->java.util.ArrayList[0])
我在这里打开了一个官方的 Spring Data Neo4j JIRA 问题。
编辑:在最新评论之后,我从这篇文章中删除了关于根本原因的无关理论。我已经更新了示例项目以Spring Data Rest
使用一种方法在图层上公开 ID PostConstruct
(感谢@meistermeier)。我也试过这个RepositoryRestConfigurerAdapter
方法。然而,原来的HttpMessageNotWritableException
仍然存在。有任何想法吗?
更新:在SDN-University 示例Movie.scala
之后
建模,我尝试将其用作对象 ID 生成器。我可以成功命中,但唯一的关键是“id”,它只是一个索引,而不是实际的 id。但是,确实返回了 38 部电影,这是电影数据集中的数量。我认为这会将问题缩小到 jsonfying 部分。com.voodoodyne.jackson.jsog.JSOGGenerator
/movies/
更新 2:
通过使用创可贴json
在控制器中手动形成(使用object-to-map
函数和map-to-json
函数),我终于能够通过端点发送数据。我已经更新了示例项目来证明这一点。我可以成功地从 中检索对象movieRepository
,并随心所欲地操作它们。我认为这显然将问题缩小到了 jsonification。有没有人有一个关于如何正确注释的明确示例(Java 或 Scala NodeEntity
)JsonIdentifyInfo
?