我正在使用Spring和HATEOAS编写基于REST的Web服务。我的实体对象之一是发票,我的控制器有一个newInvoice方法,该方法在尝试生成ResponseEntity之前一直有效。此时,resource.getId()。expand()方法失败,并显示错误java.lang.IllegalArgumentException: Not enough variable values available to expand 'id'
。
我看过using-resttemplate-in-spring-exception-not-enough-variables-available-to-expan,但这与使用RestTemplate调用服务而不是服务代码本身的人有关。
我一直遵循Building REST services with Spring上的Spring Guide,在我尝试创建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显示具有有效id值(最近为30)的已保存发票。具体来说,
Saved new invoice: Invoice (id=30, invoiceDate=2019-01-17, invoiceNumber=1005, invoiceTotal=125.00)
但是,第二个println显示该ID并未填充在资源内的链接中:
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()时,我正在使用的汇编器工作正常。