Почему resource.getId(). Expand() завершится ошибкой из-за ошибки "Недостаточно значений переменных, доступных для раскрытия" id ""?

Я пишу основанный на REST веб-сервис, используя Spring и HATEOAS. Одним из моих объектов-сущностей является Invoice, и у моего контроллера есть метод newInvoice, который работает до тех пор, пока он не попытается сгенерировать ResponseEntity; в этот момент метод resource.getId().expand() завершается с ошибкой, java.lang.IllegalArgumentException: Not enough variable values available to expand 'id',

Я посмотрел на /questions/15395152/ispolzovanie-resttemplate-vesnoj-isklyuchenie-nedostatochno-peremennyih-dlya-rasshireniya, но это относится к тому, кто использует RestTemplate для вызова сервиса, а не сам код сервиса.

Я следовал руководству Spring при построении REST-сервисов с помощью Spring, и он работал хорошо для меня, пока я не попытался создать свой метод newInvoice, который должен позволить мне создать счет из моего тестового кода, который затем будет прочитан позже в тесте. код.

Соответствующий блок кода, который вызывает у меня проблемы:

Invoice invoice = repository.save (newInvoice);
System.out.println ("Saved new invoice: " + invoice);
Resource<Invoice> resource = assembler.toResource (invoice);
System.out.println ("Created resource: " + resource);
return ResponseEntity
        .created (new URI (resource.getId().expand ().getHref()))
        .body (resource);

Первый println показывает сохраненный счет-фактуру с действительным значением идентификатора (последний раз, 30). В частности,

Saved new invoice: Invoice (id=30, invoiceDate=2019-01-17, invoiceNumber=1005, invoiceTotal=125.00)

Тем не менее, второй println показывает, что идентификатор не заполняется в ссылках внутри ресурса:

Created resource: Resource { content: Invoice (id=30, invoiceDate=2019-01-17, invoiceNumber=1005, invoiceTotal=125.00), links: [</invoices/{id}>;rel="self", </invoices>;rel="invoices", </claims?invoice={invoiceNumber}>;rel="claims", </invoices/{number}/{company}/approve?a={approver}>;rel="approve"] }

Я знаю, что это вызывает ошибку, но я не уверен, почему. Обратите внимание, что используемый ассемблер прекрасно работает, когда я читаю из базы данных, не пытаясь выполнить repository.save().

0 ответов

Другие вопросы по тегам