Почему resource.getId (). Expand () завершится ошибкой из-за ошибки «Недостаточно значений переменных, доступных для раскрытия« id »»? - PullRequest
0 голосов
/ 17 января 2019

Я пишу основанный на 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 ().

...