Spring-data-rest POST-ссылка генерирует исключение Null-Pointer

У меня есть сущность под названием StockLevel и еще один называется Version и они в таких отношениях:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "version", nullable = false, referencedColumnName = "pk")
private VersionModel version;

Теперь я хочу создать новый StockLevel через Spring-Data-REST, поэтому я отправляю следующий запрос POST по http://somedomain.com:8111/storefront/rest/stock_level/

{
   "uid" : "mynewuidForStockLevel",
   "version" : 
   {
      "rel" : "version",
      "href":"http://localhost:8111/storefront/rest/version/3378719354003680"
   }
}

Вот мой Version модель:

@Cacheable 
@Entity(name = VersionModel.NAME) 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@Table(name = VersionModel.NAME, 
       uniqueConstraints = { @UniqueConstraint(columnNames = { "pk" }) }, 
       indexes = { @Index(columnList = "id")}) 
public class VersionModel extends AbstractEntityModel {
    public static final String NAME = "version";
} 

однако я получаю исключение нулевого указателя в Fasterxml Джексона:

Caused by: java.lang.NullPointerException
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.MethodProperty.deserializeAndSet(MethodProperty.java:99)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)

Что я делаю неправильно?

1 ответ

Решение

Если вы хотите создать ассоциацию со связанным ресурсом непосредственно при создании ресурса, значение, переданное для отношения, должно быть непосредственно URI, а не объектом какого-либо рода. Пример, который вы показали, будет работать, если вы адаптируете его так:

{ "uid" : "mynewuidForStockLevel",
  "version" : "http://localhost:8111/storefront/rest/version/3378719354003680" }
Другие вопросы по тегам