快速JavaEE轻量级框架&公用业务模块 设计&实现 7

隐身守侯 提交于 2020-02-28 12:01:44

这部分的代码在

http://git.oschina.net/terrymanu/miracle-framework/tree/master/miraclesea/framework-webmvc

这个部分写的比较晚了,本来是设计的时候应该写的,但是因为当时写这个项目的时候,还没想好需要往这个模块中放什么。现在随着rbac模块的开发,渐渐的想到了一些可以提取出来的东西。

目前第一版,只支持rest api,以后会考虑支持freemarker。

1. 首先是一个流程。基本的CRUD都有一些标准流程。

如,增加一个实体的时候,首先要validate这个实体,其次通过业务方法从数据库中查询,判断这个实体是否打破了业务规则(如:唯一的用户名),如果失败,则返回相应的错误代码,如果成功。则返回正确的。

2. 基于这个流程,需要定义一个BaseResponse,用于封装Http状态码和业务对象。springmvc虽然提供了ResponseEntity,但是并没有可以放入error以及warn的地方。所以需要扩展一下。

所以现在新增加了两个包,com.miraclesea.webmvc.vo,用于存放BaseResponse;com.miraclesea.webmvc.controller用于存放模板逻辑。

其中核心的代码在AsyncBaseMangementController这个类中。提供了模板以及回调的接口。代码如下:


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协议请告知,非常感谢。

另外定义了一个回调接口,业务方法就写在这个回调接口中。

修改和删除未完待续



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!