Передача объекта JSON в конечную точку, разработанную с помощью пружины - PullRequest
0 голосов
/ 24 июня 2019

У меня есть конечная точка, которую я создал с помощью 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 голосов
/ 24 июня 2019

Используемое вами сопоставление:

customers/{customerId}/getProductsForInvoices/{invoiceIds}

Здесь и customerId, и invoiceIds являются переменными Path.

http://localhost:8030/api/v1/customers/4499/getProductsForInvoices/invoiceIds/

Вы выполняете вызов, содержащий customerId, но не invoiceIds.Либо вы можете передать список вместо invoiceIds как String и прочитать его как String, а затем создать список, разбив список - что будет плохой практикой.

Другой способ - изменить переменную пути - invoiceId на RequestBody.

Обычно переменные пути используются для одиночного идентификатора или, скажем, навигации по некоторым структурированным данным.Если вы хотите работать с группой идентификаторов, рекомендуется передавать их как RequestBody при вызове метода Post, а не как вызов метода Get.

Пример фрагмента кода для REST API (после вызова):

Здесь, скажем, вы пытаетесь передать объект Employee в вызов POST, API REST будет выглядеть примерно так:

@PostMapping("/employees")
Employee newEmployee(@RequestBody Employee newEmployee) {
    //.. perform some operation on newEmployee
}

Эта ссылка поможет вам лучше понять, как использовать RequestBody иПеременные пути - https://javarevisited.blogspot.com/2017/10/differences-between-requestparam-and-pathvariable-annotations-spring-mvc.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...