将json对象传递给使用spring开发的端点

时间:2019-06-24 20:29:07

标签: java spring-mvc

我有一个使用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循环中始终为空,什么也没有传递到该数组。我在做什么错了?

1 个答案:

答案 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

https://spring.io/guides/tutorials/rest/