GoFramework框架简介(六)--web篇

时间:2024-03-12 18:45:16

使用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;
}