快速JavaEE輕量級框架&公用業務模塊 設計&實現 7 - WEB MVC設計

這部分的代碼在 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

另外定義了一個回調接口,業務方法就寫在這個回調接口中。

修改和刪除未完待續

相關文章
相關標籤/搜索