2013-02-22 2 views
0

Я разрабатываю небольшое приложение RESTful с использованием Spring MVC, и я хочу реализовать общий CRUD в общих контроллерах, службах и, возможно, объектах. У меня есть объект Person и 2 объекта, которые наследуют поля от этого объекта (например, Person1 и Person2).spring mvc generic контроллеры и службы

Какой был бы лучший способ сделать это?

Я видел пример, где все контроллеры были окончательными. Неплохая практика иметь общие контроллеры? Как насчет услуг? Как создать общий объект?

ответ

1

Нет, я не думаю, что его плохая практика иметь контроллер не окончательный. На самом деле, я никогда не писал контроллер Spring MVC, который был окончательным, хотя я мог видеть призыв сделать это.

Что касается «общего» контроллера, ничего не мешает вам создать контроллер базового класса. Контроллер - это просто ПОЖО, так что это будет довольно прямолинейно.

Еще лучше, если вы хотите получить максимальную отдачу от своего доллара, почему бы не использовать Spring Roo? Его все Spring MVC внизу, генерирует код вашей котельной, и когда вы закончите использовать его, чтобы развернуть всю работу по созданию вашего сайта, вы можете просто вставить весь код, генерируемый роумом, в свой собственный и отбросить в сторону, если вам это больше не нужно.

+0

Спасибо за ваш ответ. Я пробовал использовать Spring ROO, он выглядит очень хорошо с самого начала, но мне не понравилась комбинация jspx + dojo, и аспекты были довольно раздражающими. Я закончил тем, что сбросил его и сам создал объекты. – adrian

+0

Мне тоже не нравится Dojo, и я обычно заменяю его jQuery, когда я использую Roo для проекта. В основном я использую Roo для генерации кода плиты котла для сущностей и базовых контроллеров и установки Spring Security. Обычно я не использую его, чтобы помогать моим сущностям. – CodeChimp

2

Я уже разработал что-то вроде этого делает общий контроллер абстрактной с абстрактным методом

protected abstract RestService<T, ID> getService(); 

и другой контроллер должна расширяет этот контроллер и этот метод также я сделал то же самое для службы с абстрактным методом

protected abstract PagingAndSortingRepository<T, ID> getRepo(); 

Чтобы получить репозиторий, чтобы использовать его в абстрактной службе, вам нужно позаботиться о том, что эти абстрактные классы не имеют @Controller или @Service, также в подклассе Controller вы должны указать свой r ОКТ путь как:

@Controller 
@RequestMapping("/customer") 
public class CustomerRestController extends RestController<Customer, Long> { 

и в абстрактном контроллера вы должны использовать относительные пути, как:

@RequestMapping(value = "/{id}", method = RequestMethod.PUT) 
@ResponseBody 
public ResponseEntity<String> update(@PathVariable ID id, 
    @RequestBody T t) { 

, если вы заинтересованы в этом решении я могу разделить исходный код с вами

+0

@bassemZohdy у вас есть код? –