這部分的代碼在 java
http://git.oschina.net/terrymanu/miracle-framework/tree/master/miraclesea/framework-webmvc git
這個部分寫的比較晚了,原本是設計的時候應該寫的,可是由於當時寫這個項目的時候,還沒想好須要往這個模塊中放什麼。如今隨着rbac模塊的開發,漸漸的想到了一些能夠提取出來的東西。 web
目前初版,只支持rest api,之後會考慮支持freemarker。 spring
1. 首先是一個流程。基本的CRUD都有一些標準流程。 數據庫
如,增長一個實體的時候,首先要validate這個實體,其次經過業務方法從數據庫中查詢,判斷這個實體是否打破了業務規則(如:惟一的用戶名),若是失敗,則返回相應的錯誤代碼,若是成功。則返回正確的。 api
2. 基於這個流程,須要定義一個BaseResponse,用於封裝Http狀態碼和業務對象。springmvc雖然提供了ResponseEntity,可是並無能夠放入error以及warn的地方。因此須要擴展一下。 mvc
因此如今新增長了兩個包,com.miraclesea.webmvc.vo,用於存放BaseResponse;com.miraclesea.webmvc.controller用於存放模板邏輯。 ui
其中核心的代碼在AsyncBaseMangementController這個類中。提供了模板以及回調的接口。代碼以下: spa
public abstract class AsyncBaseMangementController<T> { public final ResponseEntity<BaseResponse<T>> add(final T entity, final BindingResult result, final MvcCallback callback) { BaseResponse<T> response = new BaseResponse<T>(); if (result.hasErrors()) { for (ObjectError error : result.getAllErrors()) { response.getErrors().add(ResponseFeedback.builder().code(error.getCodes()[0]).build()); } return new ResponseEntity<BaseResponse<T>>(response, HttpStatus.UNPROCESSABLE_ENTITY); } try { callback.execute(); } catch (final DataIntegrityViolationException ex) { response.getErrors().add(ResponseFeedback.builder().code(ex.getKey()).build()); return new ResponseEntity<BaseResponse<T>>(response, HttpStatus.CONFLICT); } return new ResponseEntity<BaseResponse<T>>(response, HttpStatus.CREATED); } }
如今有一些問題未肯定。若是是建立成功,返回201,這個是沒問題的。若是建立失敗,驗證失敗返回422,資源衝突返回409,這兩個有點拿不許。若是哪位熟悉http協議請告知,很是感謝。 .net
另外定義了一個回調接口,業務方法就寫在這個回調接口中。
修改和刪除未完待續