使用SpringMvc做为web的核心框架,一般接口后缀为".do"。RequestBody类型的请求参数要求继承AbstarctBaseRequestDto,自带校验逻辑。响应结果要求使用ResDto类型。在方法中可以抛出异常。
框架的拦截器列表
拦截器 | 说明 |
---|---|
通用拦截器 | 将接口请求的关键信息设置在上下文中 |
会话注入拦截器 | 基于SPI方式,允许项目将会话对象的json串设置在上下文中。 |
框架通过2个拦截器将关键信息记录在上下文中,使得在dubbo调用时,可以将该信息传递到dubbo服务端。
框架的转换器
转换器 | 说明 |
---|---|
jackson转换器 | 定义了将json字符串读取与写入的方法 |
异常处理器
自定的异常处理器org.go.framework.web.exception.AnnotationHandlerMethodExceptionResolver,对mvc方法中抛出的异常进行处理。转换方式
异常类型 | 说明 |
---|---|
PendingException | 提取异常对象中的code和message字段,转换成ResDto |
GoRuntimeException | 同上 |
其它异常 | 根据异常类型定义出10多种不同的错误码,如空指针异常,数组越界等。如果所有类型都匹配不到,则使用“其它未知错误”的错误码。 |
SPI扩展部分
会话属性注入扩展
描述请求参数的Field在使用@MvcInject注解时的具体操作。实现该SPI后,web应用将支持@MvcValidate和@MvcInject注解。Mvc扩展注解说明如下:
注解名称 | 作用范围 | 说明 |
---|---|---|
MvcValidate | 方法 | 方法加上此注解后,会对请求参数中带@MvcInject注解的属性进行自动注入,最后执行AbstractBaseRequestDto.validateThrow方法。 |
MvcInject | 属性 | 从会话中自动注入该属性 |
MvcOptional | 属性 | 接口文档中生成的属性会带上“可选”标识 |
MvcIgnore | 属性 | 带该注解的字段不会生成在接口文档中,表示后续通过计算得到的属性值,一般用于mybatis中。 |
会话对象注入扩展
描述在上下文设置会话的具体实现。实现该注解后,在dubbo端可以从RpcContext中获取到用户会话信息。如下:
public static RpcSessionUser get() {
// 从context中获取会话信息的json字符串
RpcSessionUser rpcSessionUser = new Gson().fromJson(Context.getRequestInfo().getSessionUser(),RpcSessionUser.class);
// 若用户会话信息不存在则抛出异常
if(Context.getRequestInfo().getSessionUser() == null) {
throw new GoRuntimeException(ResCode.RPC_SESSION_GET_FAILED.toException());
}
return rpcSessionUser;
}