Сборка URI в Spring MVC с необязательной переменной шаблона uri - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы создать URI из Spring UriTemplate, где последняя переменная uri является необязательной:

new UriTemplate("/test/{id}").expand("1")   // OK

должен быть расширен до /test/1, тогда как

new UriTemplate("/test/{id}").expand()      // fails

должен просто разверните до /test/.

К сожалению, я получаю java.lang.IllegalArgumentException: Not enough variable values available to expand 'id' во втором случае.

Есть ли способ сообщить Spring, что переменная uri является необязательной?

ОБНОВЛЕНИЕ

Просто передача null не работает в моем случае, потому что расширение шаблона происходит внутри небольшого базового класса библиотеки, где я не знаю точного Шаблон URI и количество переменных URI заранее.

(упрощенный) вариант использования выглядит следующим образом:

void post(Object... uriVars) {
  var url = new UriTemplate(template()).expand().toString();
  // do stuff with the url
}

protected abstract template();

1 Ответ

0 голосов
/ 24 марта 2020

Это, кажется, довольно сложный случай, но я отвечу на свой вопрос. На всякий случай кому-то еще это может понадобиться.

Я решил это, скопировав переменные URI в массив ожидаемого размера:

void post(Object... uriVars) {
  var uriTemplate = new UriTemplate(template());
  var totalNumberOfVars = uriTemplate.getVariableNames().size();
  var uri uriTemplate.expand(Arrays.copyOf(uriVars, totalNumberOfVars));
  // do stuff with the url
}

protected abstract template();

Это не красиво, но работает .

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