Можно ли использовать значение для @RequestMapping, которое является строкой, но не строковым литералом? - PullRequest
5 голосов
/ 06 сентября 2011

Есть ли способ использовать значение Enum в RequestMapping?

@RequestMapping(value = "/example", 
method = RequestMethod.POST)
public final void foo(final HttpServletResponse response,

Я хочу использовать значение URL, которое уже сохранено в Enum.

Тем не менее, я получаю ошибки во время компиляции, когда пытаюсь поместить что-либо, кроме строкового литерала в RequestMapping.

Как он узнает разницу между литералом String и String, который не является литералом String (не уверен, как он называется)?

Это то, что я пытался, но во время компиляции это не удалось:

@RequestMapping(value = FooEnum.Example.getStringValue(), 
method = RequestMethod.POST)
public final void foo(final HttpServletResponse response,

Я также пытался использовать String.format, но это тоже не нравится:

@RequestMapping(value = String.format("%s", FooEnum.Example.getStringValue()), 
method = RequestMethod.POST)
public final void foo(final HttpServletResponse response,

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Атрибутам аннотаций могут быть назначены только литеральные значения, поскольку они должны быть известны во время компиляции при обработке аннотаций. Да, вы можете использовать значение enum, где «enum value» равно FooEnum.Example, но не для атрибута, который принимает строковое значение, и вы не можете вызвать метод для него.

0 голосов
/ 28 апреля 2012

Привязка вашего URL к значению enum кажется забавной;Я бы не хотел, чтобы мои URL менялись, если я обновил перечисление.Вы действительно генерируете клиентские ссылки, используя те же самые перечисления?Может быть, вместо этого вы могли бы просто запросить bean-компонент Spring's Handler для URL-адресов?

Существует также Язык выражений Spring , но я знаю только то, что он работает в аннотациях @Value, я не уверен@ RequestMapping

Если вы пытаетесь перехватить несколько URL-адресов одним способом, вы можете использовать @ PathVariable

...