2013-02-22 189 views
0

我正在開發一個使用Spring MVC的小型RESTful應用程序,我想在通用控制器,服務和實體中實現通用CRUD。我有一個實體Person和兩個實體,它們繼承了來自此實體的字段(例如Person1Person2)。spring mvc通用控制器和服務

什麼是最好的方法來做到這一點?

我看到一個例子,所有控制器都是最終的。擁有通用控制器是不好的做法嗎?服務怎麼樣?我如何製作一個通用的實體?

回答

1

不,我認爲不好的做法是讓控制器不是最終的。事實上,我從來沒有寫過一個最終的Spring MVC控制器,儘管我可以看到它的吸引力。

至於「通用」控制器,沒有什麼能夠阻止你創建一個基類控制器。控制器只是一個POJO,所以它會非常直截了當。

更好的是,如果你想得到最大的回報,爲什麼不使用Spring Roo?它的下面所有的Spring MVC都會生成你的鍋爐代碼,當你完成了使用它來完成所有創建站點的繁瑣工作時,你可以簡單地將所有roo生成的代碼放到你自己的代碼中,然後拋棄你不再需要它了。

+0

感謝共享源代碼的響應。我嘗試過使用Spring ROO,它看起來非常好,但我不喜歡jspx + dojo的組合,並且這些方面也很煩人。我最終放棄了它並自己創建了實體。 – adrian 2013-02-25 19:14:31

+0

我也不喜歡Dojo,當我爲項目使用Roo時,我通常會用jQuery替換它。我主要使用Roo來生成實體和基本控制器的鍋爐板代碼並獲得Spring Security設置。我通常不會用它來支撐我的實體。 – CodeChimp 2013-04-23 11:18:46

2

我已經開發了這樣的事情使通用控制器抽象的一個抽象的方法

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

和其他控制器必須擴展該控制器還實現這個方法我爲服務相同的抽象方法

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

要讓存儲庫在抽象服務中使用它,必須注意這些抽象類沒有@Controller或@Service,在Controller的子類中也必須指定r OOT路徑爲:

@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你有密碼嗎? – 2017-07-25 12:06:58