| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Один контроллер - один метод |
| Автор: RZ_RZ 18.6.2010, 20:30 | ||||
| Привет. Я хочу, чтобы мои контроллеры содежали по одному методу. Делаю так
Но, понятное дело, методы не вызываются. Тоесть я в type-level RequestMapping уникально сопоставил контроллер к пути. Теперь мне надо както указать, что единственный метод контроллера и будет обработчиком. Как это сделать? |
| Автор: ki6opr 21.6.2010, 02:23 | ||
на методе тоже должна быть анотация @RequestMapping иначе спринг никогда не поймет какие методы он должен вызвать |
| Автор: RZ_RZ 21.6.2010, 05:05 | ||||||
Я понимаю. Я пытался на класс повесить @RequestMapping( value = "/catalog/{categoryId}", method = RequestMethod.PUT ) а на метод @RequestMapping( header="*" ), но всеравно ничего не вышло. Вообще у меня проблема такая, есть каталог продукции, продукция по категориям. Имеем следующие шаблоны для URLов:
Тоесть если я напишу
То у меня будет 20 методов в одном классе. Не очень удобно. Вот я и подумал, как можно разделить все это дело? Я бы предпочел 20 маленьких классов одному большому. |
| Автор: ki6opr 21.6.2010, 08:03 | ||
| как написано в джава доках, если у вас в контроллере есть всего один метод и вы хотите что бы он был дефолтным для всех, аноитруйте его @RequestMapping вот так будет выглядить ваш контроллер:
если не секрет а остальные 15 методов это работа с подкатегориями ? если да, то возникает вопрос, а вы не можете работать с подкатегориями так же как и с категориями ? тоесть GET /catalog/{caegorytId}/{subcaegorytId} не является для вас эквивалентом этой GET /catalog/{subcaegorytId} ? просто мне кажется что неправильно CRUD контроллер разбивать на кучу контроллеров с одним действием, причем половина которых может быть заменена. мне кажется что логичнее сдеалать так: [id_базовой_категории=null, id_категории=1]-[id_базовой_категории=1, id_категории=2]-[id_базовой_категории=2, id_категории=3] и тд тогда возможна неограниченая вложенность + везде это просто категория. |
| Автор: RZ_RZ 21.6.2010, 08:46 | ||||||||||
Сделал два контроллера
запустил, обновил страницу, получил это
Добавлено @ 08:55
Да, остальные 15 это работа с подкатегориями и с конечным продуктом (категория/подкатегория/товар). Можно сделать так, как вы говорите. Но я хотел бы сделать УРЛ в том виде, в каком виртуально расположены ресурсы. Тоесть в категории находится подкатегория, а в подкатегории уже лежит товар. К тому же, возможно, в будущем появятся какието отличия категории от подкатегории, которые потребуют отдельного обработчика. Я подумал, что лучше это предусмотреть в начале пути. |
| Автор: ki6opr 22.6.2010, 03:15 |
| исключение говорит о том что у вас уже есть контроллер по такому урлу /catalog/{categoryId}, тоесть urlmapper игнорирует http методы в @RequestMapping поэтому нужно, что бы методы по этому урлу были в одном классе, либо что бы урлы чем то отличались. поэтому я бы тогда разделил контроллеры на контроллеры работающие с категориями и подкатегориями, если уж вы так хотите сделать. но дальше дробить не очень хорошая идея имхо, если боитесь что будет много кода, сделайте этот контроллер фасадом а обработку делегируйте другим классам. кстати http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch16s11.html 16.11.3.1 Advanced @RequestMapping options написанно что поддерживаются Ant-style path patterns вида /owners/*/pets/{petId} может поможет |
| Автор: RZ_RZ 22.6.2010, 06:05 |
| В том то и дело, что если я разделю контроллеры, на те, что с категориями, на те, что с подкатегориями и на те, что с продуктом, опять не получится разных урлов GET /catalog/{categoryId} - вернуть категорию (список подкатегорий) POST /catalog - вставить новую категорию вот уже на двух этих операциях имеем разные пути. Тоесть сгруппировать контроллеры по пути конечно можно, но это уже получится совсем не логичная группировка, на мой взгляд. Сейчас у меня в каждом обработчике по 3-6 строк кода, вроде не сильно напрягает размер класса, но в начале оно ведь всегда так Спасибо |