如何创建与现有实体具有一对一关系的资源?以论坛用户为例。我们有两个可以相互独立存在的顶级资源:用户和问题。如果您要逐字发布您的 JSON,您将发送如下内容:
POST /api/users
{name: "John Doe", "email": "jdoe@example.com"}
并取回位置标头:http ://example.com/api/users/1
然后
POST /api/questions
{"author": "http://example.com/api/users/1", "title": "How to do this?", "text": "I don't know how to do this..."}
使用 RestTemplate 我很想这样做:
Question q = new Question();
q.author = somePreviouslyCreatedUSerReference;
q...
template.getForLocation("/api/questions", q);
但是你得到的是以下错误,因为反序列化程序需要一个引用。有很多关于使用琐碎 REST 端点的文档,但在实际创建现实世界资源时却很少。
Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: com.example.model.Question["author"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1420)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:244)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2158)
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:225)
... 39 common frames omitted
Caused by: java.lang.NullPointerException: null
at java.net.URI$Parser.parse(URI.java:3023)
at java.net.URI.<init>(URI.java:595)
at java.net.URI.create(URI.java:857)
at org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module$UriStringDeserializer.deserialize(PersistentEntityJackson2Module.java:359)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:106)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)
... 43 common frames omitted