Сбой пружины с несколькими @изменяемыми путями

#spring

Вопрос:

когда я пытаюсь вызвать эту конечную точку только с этой конечной точкой: /api/v1/данные/{поставщик}/{субъект} (я удалил параметр набора данных @pathvariable, когда избавился от пути к набору данных) Я могу успешно вызвать свой API. Однако, когда я добавляю дополнительный изменяемый путь (в данном случае набор данных), я больше не могу попасть в свою конечную точку. Существует ли какое-то ограничение на количество переменных пути? Не знаю, что я делаю не так.

 @GetMapping("/api/v1/data/{provider}/{subject}/{dataset}")
public List<List<String>> getEDXDatasetHead(
            @PathVariable final String provider,
            @PathVariable final String subject,
            @PathVariable final String dataset,
            @RequestParam(required = false, value = "date") final String date
) 
 

https://localhost:8443/api/v1/data/testprovider/testsubject/testdataset
@GetMapping(«/api/v1/данные/{поставщик}/{субъект}/{набор данных}»)

Комментарии:

1. Позвольте мне проверить, правильно ли я это понял. У вас настроена конечная точка, @GetMapping("/api/v1/data/{provider}/{subject}/{dataset}") и вы звоните /api/v1/dataset/{provider}/{subject} , и она не работает? Не могли бы вы, пожалуйста, выразиться немного яснее?

2. Конечно. Конечная точка — @GetMapping(«/api/v1/данные/{поставщик}/{субъект}/{набор данных}») И я вызываю: localhoststuff: api/v1/данные/testprovider/testsubject/testdataset Я могу проверить, что мой порт localhostправил, потому что я могу попасть в другие конечные точки.

3. Решенный. Из-за ошибки в зависимости

Ответ №1:

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

Но если вы хотите вызвать свой API с большим количеством переменных пути, вам нужно добавить метод для каждого из них, иначе spring не сможет понять, что вы вызываете один и тот же метод с меньшим количеством переменных пути:

 @GetMapping("/api/v1/data/{provider}/{subject}/{dataset}")
public List<List<String>> getEDXDatasetHead(
            @PathVariable final String provider,
            @PathVariable final String subject,
            @PathVariable final String dataset,
            @RequestParam(required = false, value = "date") final String date
) 


...


@GetMapping("/api/v1/data/{provider}/{subject}")
public List<List<String>> getEDXDatasetHead(
            @PathVariable final String provider,
            @PathVariable final String subject,
            @RequestParam(required = false, value = "date") final String date
) 

...


@GetMapping("/api/v1/data/{provider}")
public List<List<String>> getEDXDatasetHead(
            @PathVariable final String provider,
            @RequestParam(required = false, value = "date") final String date
) 
 

Примечание: spring не имеет конкретного ограничения на количество изменяемых путей, которые могут использоваться в методе. Но есть ограничения на:

  • размер сгенерированного URL-адреса (если слишком долго не все браузеры обрабатывают его правильно)
  • формат URL-адреса (проверьте, закодированы ли переменные пути в URL-адресе при построении URL-адреса на стороне клиента)

Комментарии:

1. Я согласен с вами в этом, но мне не нужно перегружать, и у меня есть только один метод с одной конечной точкой (со всем требуемым {} форматированием пути. Я в значительной степени хочу тот первый метод, который вы связали, но когда я пытаюсь попасть в эту конечную точку, это просто не удается.

2. опубликуйте URL — адрес, который не удался, и соответствующий путь @GetMapping

3. Извините за задержку, отредактировал URL-адреса в вопросе

4. @alexst ваше обновление кажется правильным, но отличается от исходного кода. Вы используете @GetMapping(«/api/v1/**данные**/{поставщик}/{субъект}/{набор данных}») или @GetMapping(«/api/v1/**edx**/{поставщик}/{субъект}/{набор данных}») ?

5. Я использую «данные». Просто пробовал что-то другое в IDE, но не вернулся назад. Извинения.