4

如何创建与现有实体具有一对一关系的资源?以论坛用户为例。我们有两个可以相互独立存在的顶级资源:用户和问题。如果您要逐字发布您的 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
4

0 回答 0