Spring Data REST - POST关系的新实体

时间:2014-05-20 18:23:14

标签: spring rest jpa jackson spring-data-rest

相关:Spring Data Rest版本2.0.2

我尝试使用@ManyToOne(而不是像示例中的@OneToOne)关系向Person发送一个实体(地址),如下所述:Embedded Entity references in complex object graphs但是我得到了杰克逊错误:

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]

我觉得很奇怪,我可以在" person"中发送带有rel和href的JSON对象。地址的属性如:

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

这仍然有效吗?提到的页面很旧(2012年)。 有没有更新的文档。我已经审查了参考文档,即使是最新的(迄今为止)2.1.0 RC1,但我发现它缺乏。

任何指针都会受到赞赏。

Stackoverflow建议我看this question,在我的情况下失败了HTTP状态405 - 请求方法' POST'不支持......这可能是一个配置问题,但我原来的问题就是。

更新1 :在参考文档部分4.1中,它说:

  

有时,Spring Data REST的ObjectMapper的行为可能无法正确处理您的域模型,该行为被专门配置为使用可将域对象转换为链接并再次返回的智能序列化程序。可以通过很多方式构建数据,您可能会发现自己的域模型未正确转换为JSON。在这些情况下,以通用方式尝试和支持复杂域模型有时也不实用。有时,根据复杂性,甚至不可能提供通用解决方案。

问题可能在于我使用支持Hibernate的自定义Jackson ObjectMapper。我会尝试进一步挖掘。

更新2 :没关系更新1,我删除了Hibernate4Module,行为是一样的。

1 个答案:

答案 0 :(得分:12)

您链接的页面上的格式已过期。我刚刚更新了它。正确的格式是:

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

至少,这对我的实体有用。