弹簧数据NEO4J 5 -HTTPMESSAGENOTWRATIOTEXCEPTION登录资源端点时



试图重新创建Scala中的Spring Data NEO4J官方电影示例,我已经遇到了弹簧数据NEO4J层的问题。

在此示例项目中的README中注明了详细信息。

启动弹簧应用程序并击中/movies/<id>给出以下堆栈:

018-03-27 15:33:23警告DefaulthandlerexceptionResolver:442-失败 写http消息: org.springframework.http.converter.httpmessagenotwratible exception: 无法写JSON:MOVIES.MOVIE的无效对象ID定义: 找不到名称为" ID"的属性;嵌套异常是 com.fasterxml.jackson.databind.jsonmappingexception:无效对象ID 电影的定义。情报:找不到具有名称'id'的属性 (通过参考链: org.springframework.hateoas.pageDresources [" _嵌入"]

我在这里打开了官方的弹簧数据Neo4J Jira问题。

编辑:在最新评论之后,我从这篇文章中删除了有关根本原因的无关理论。我已经更新了示例项目,以使用PostConstruct方法(感谢@MeisterMeier(在Spring Data Rest层上公开ID。我还尝试了RepositoryRestConfigurerAdapter方法。但是,原始的HttpMessageNotWritableException持续存在。有什么想法吗?

更新:在SDN-University示例之后对Movie.scala进行建模,我尝试使用com.voodoodyne.jackson.jsog.JSOGGenerator作为对象ID生成器。我可以成功击中/movies/,但唯一的关键是" ID",它只是一个索引,而不是实际ID。但是,确实有38部电影返回,这是电影数据集中的数量。我认为这将问题缩小到了jsonfying的部分。

更新2:通过使用创可贴在控制器中手动形成json(使用object-to-map函数和map-to-json函数(,我最终能够通过端点发送数据。我已经更新了示例项目以证明这一点。我可以从movieRepository中成功检索对象,并随意操纵它们。我认为这显然将问题范围缩小到了jsonification。有人有一个明确的示例(Java或Scala(,如何使用JsonIdentifyInfo正确注释NodeEntity

首先在ID上的注释AS String部分:内部NEO4J ID必须为类型Long(此处的信息部分之间的段落:https://neo4j.com/docs/ogm - 手动/当前/参考/参考:注释原理:实体 - 身份证(。与Long相比,其他类型Neo4J OGM无法在您的课堂上找到所谓的本机ID字段。

现在回到您面临的最初问题。春季数据休息会抑制ID状字段的暴露,而弹簧数据NEO4J将标记/寄存器字段,并以@Id的注释。要使用此ID字段,您可以做这样的事情:

public class SpringBootApplication {
  private final RepositoryRestConfiguration configuration;
  public SpringBootApplication(RepositoryRestConfiguration configuration) {
    this.configuration=configuration;
  }
  @PostConstruct
  public void configuration() {
    configuration.exposeIdsFor(Person.class);
  }

我知道这是Java,所以这是scala-ish。

旁注:

  • 我们目前正在升级电影样本
  • 此问题与类加载错误完全无关

最后,一个多月后,我解决了问题。

您必须将scala.beans.BeanProperty添加到需要生成的Getters和Setter的任何vars

将其添加到我的NodeEntity属性以及sessionFactory BEAN和transactionManager BEAN中,而我所有的问题都神奇地消失了。

记录此所需的注释是有意义的在Scala中使用这些库。

相关内容

  • 没有找到相关文章

最新更新