Spring MVC: расширенное отображение на основе аннотаций - PullRequest
1 голос
/ 09 февраля 2012

Я ищу способ иметь сложные сопоставления URL, которые бы зависели от содержимого базы данных. Например, я показываю два сопоставления URL:

    /{category}/
    /{category}/{slug}/{id}

Категории могут быть, например:

    apples, pears, lemons -> resolve to FruitListController, 
    beans, onions, potatoes -> resolve to VegetableListController.
  • Обратите внимание, что эти категории хранятся в базе данных и могут быть изменены.

Если у меня есть дополнительно slug и id, они оба должны быть проверены по базе данных, если они существуют.

Можно ли как-нибудь написать какой-нибудь "обработчик категории", который бы возвращал соответствующую категорию и связанный контроллер?

Очевидно, что это проблема перевода URL -> Запрос . Кроме того, есть ли способ сгенерировать обратно Запрос -> URL аналогичным образом? Я хотел бы что-то вроде в шаблонах:

  <c:foreach="apples as apple"
       <a href="${link AppleController:defaultView, ID = apple.id}">${apple.name}</a>
  </c:foreach>

1 Ответ

2 голосов
/ 09 февраля 2012

Использовать WebArgumentResolvers .У них есть доступ к WebRequest для просмотра вашего URL.Решающие устройства могут выполнять поиск в вашей базе данных.FruitWebArgumentResolver может вернуть Fruit или вернуть UNRESOLVED.VegetableArgumentResolver может вернуть Vegetable или вернуть UNRESOLVED.После того, как аргумент разрешен, адаптер обработчика может сопоставиться с RequestMapping, который принимает определенный тип в качестве аргумента.Например,

@RequestMapping("/{catagory}/{slug}")
public void fruitSlugList(Fruit fruit, @PathVariable("slug") String slug){

Чтобы увидеть пример этого, у меня есть пост в блоге, который использует механизм того же типа: http://www.adamweigold.com/2012/01/using-multpartrequestresolvers-with.html

...