![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
RZ_RZ |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.9.2006 Репутация: нет Всего: нет |
Привет.
Я хочу, чтобы мои контроллеры содежали по одному методу. Делаю так
Но, понятное дело, методы не вызываются. Тоесть я в type-level RequestMapping уникально сопоставил контроллер к пути. Теперь мне надо както указать, что единственный метод контроллера и будет обработчиком. Как это сделать? |
||||
|
|||||
ki6opr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
на методе тоже должна быть анотация @RequestMapping иначе спринг никогда не поймет какие методы он должен вызвать Это сообщение отредактировал(а) ki6opr - 21.6.2010, 02:26 |
|||
|
||||
RZ_RZ |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.9.2006 Репутация: нет Всего: нет |
Я понимаю. Я пытался на класс повесить @RequestMapping( value = "/catalog/{categoryId}", method = RequestMethod.PUT ) а на метод @RequestMapping( header="*" ), но всеравно ничего не вышло. Вообще у меня проблема такая, есть каталог продукции, продукция по категориям. Имеем следующие шаблоны для URLов:
Тоесть если я напишу
То у меня будет 20 методов в одном классе. Не очень удобно. Вот я и подумал, как можно разделить все это дело? Я бы предпочел 20 маленьких классов одному большому. |
||||||
|
|||||||
ki6opr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
как написано в джава доках, если у вас в контроллере есть всего один метод и вы хотите что бы он был дефолтным для всех, аноитруйте его
@RequestMapping вот так будет выглядить ваш контроллер:
если не секрет а остальные 15 методов это работа с подкатегориями ? если да, то возникает вопрос, а вы не можете работать с подкатегориями так же как и с категориями ? тоесть GET /catalog/{caegorytId}/{subcaegorytId} не является для вас эквивалентом этой GET /catalog/{subcaegorytId} ? просто мне кажется что неправильно CRUD контроллер разбивать на кучу контроллеров с одним действием, причем половина которых может быть заменена. мне кажется что логичнее сдеалать так: [id_базовой_категории=null, id_категории=1]-[id_базовой_категории=1, id_категории=2]-[id_базовой_категории=2, id_категории=3] и тд тогда возможна неограниченая вложенность + везде это просто категория. Это сообщение отредактировал(а) ki6opr - 21.6.2010, 08:09 |
|||
|
||||
RZ_RZ |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.9.2006 Репутация: нет Всего: нет |
Сделал два контроллера
запустил, обновил страницу, получил это
Добавлено @ 08:55
Да, остальные 15 это работа с подкатегориями и с конечным продуктом (категория/подкатегория/товар). Можно сделать так, как вы говорите. Но я хотел бы сделать УРЛ в том виде, в каком виртуально расположены ресурсы. Тоесть в категории находится подкатегория, а в подкатегории уже лежит товар. К тому же, возможно, в будущем появятся какието отличия категории от подкатегории, которые потребуют отдельного обработчика. Я подумал, что лучше это предусмотреть в начале пути. Это сообщение отредактировал(а) RZ_RZ - 21.6.2010, 08:59 |
||||||||||
|
|||||||||||
ki6opr |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
исключение говорит о том что у вас уже есть контроллер по такому урлу /catalog/{categoryId}, тоесть urlmapper игнорирует http методы в @RequestMapping
поэтому нужно, что бы методы по этому урлу были в одном классе, либо что бы урлы чем то отличались. поэтому я бы тогда разделил контроллеры на контроллеры работающие с категориями и подкатегориями, если уж вы так хотите сделать. но дальше дробить не очень хорошая идея имхо, если боитесь что будет много кода, сделайте этот контроллер фасадом а обработку делегируйте другим классам. кстати Spring mvs @RequestMapping 16.11.3.1 Advanced @RequestMapping options написанно что поддерживаются Ant-style path patterns вида /owners/*/pets/{petId} может поможет |
|||
|
||||
RZ_RZ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.9.2006 Репутация: нет Всего: нет |
В том то и дело, что если я разделю контроллеры, на те, что с категориями, на те, что с подкатегориями и на те, что с продуктом, опять не получится разных урлов
![]() GET /catalog/{categoryId} - вернуть категорию (список подкатегорий) POST /catalog - вставить новую категорию вот уже на двух этих операциях имеем разные пути. Тоесть сгруппировать контроллеры по пути конечно можно, но это уже получится совсем не логичная группировка, на мой взгляд. Сейчас у меня в каждом обработчике по 3-6 строк кода, вроде не сильно напрягает размер класса, но в начале оно ведь всегда так ![]() Спасибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |