#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, но не вернулся назад. Извинения.