我有一个使用spring.io创建的端点。我的GetMapping声明可以在下面看到
@ApiOperation(
value = "Returns a pageable list of CustomerInvoiceProducts for an array of CustomerInvoices.",
notes = "Must be authenticated.")
@EmptyNotFound
@GetMapping({
"customers/{customerId}/getProductsForInvoices/{invoiceIds}"
})
public Page<CustomerInvoiceProduct> getProductsForInvoices(
@PathVariable(required = false) Long customerId,
@PathVariable String[] invoiceIds,
Pageable pageInfo) {
//Do something fun here
for (string i: invoiceIds){
//invoiceIds is always empty
}
}
这是我从邮递员那里调用URL并传递数据的方式。
http://localhost:8030/api/v1/customers/4499/getProductsForInvoices/invoiceIds/
{
"invoiceIds": [
"123456",
"234566",
"343939"
]
}
我的invoiceIds字符串数组在for循环中始终为空,什么也没有传递到该数组。我在做什么错了?
答案 0 :(得分:-1)
您正在使用的映射是这样:
customers/{customerId}/getProductsForInvoices/{invoiceIds}
customerId和invoiceIds都是路径变量。
http://localhost:8030/api/v1/customers/4499/getProductsForInvoices/invoiceIds/
您正在拨打的电话包含customerId,但不包含invoiceId。您可以将清单代替invoiceIds作为String传递,并以String形式读取它,然后通过分解List来创建List-这将是一个坏习惯。
其他方法是将路径变量-invoiceId更改为RequestBody。
通常,路径变量用于单个id或说浏览某些结构化数据。当您要处理一组ID时,建议的做法是在Post方法调用中而不是Get方法调用中将它们作为RequestBody传递。
REST API的示例代码片段(调用后):
在这里,假设您要尝试将Employee对象传递给POST调用,则REST API如下图所示
@PostMapping("/employees")
Employee newEmployee(@RequestBody Employee newEmployee) {
//.. perform some operation on newEmployee
}
此链接将使您对使用RequestBody和PathVariables有更好的了解- https://javarevisited.blogspot.com/2017/10/differences-between-requestparam-and-pathvariable-annotations-spring-mvc.html