Я пишу основанный на REST веб-сервис, используя Spring и HATEOAS. Одним из моих объектов-сущностей является Invoice, и у моего контроллера есть метод newInvoice, который работает до тех пор, пока он не попытается сгенерировать ResponseEntity; в этот момент метод resource.getId (). expand () завершается с ошибкой, java.lang.IllegalArgumentException: Not enough variable values available to expand 'id'
.
Я смотрел на использование-resttemplate-in-spring-исключения-недостаточно-переменных-доступных-для-расширения , но это относится к тому, кто использует RestTemplate для вызова службы, а не службы сам код.
Я следовал Spring Guide на Построение служб 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 ().