spring-mvc

halo采用spring-mvc作为与前端页面进行数据交互的基础组件。为了让业务开发过程更加规范,框架已经内置多个spring-mvc的拦截器。通过这些拦截器对异常处理,输入参数,输出结果,校验等数据格式和执行过程进行了统一封装和干预。

数据交互

首先,通过@Controller注解将Java类声明为spring-mvc的控制器;其次,对类中的每个public方法包含的输入参数可以通过添加特定的注解来控制Spring将特定的数据mapping为特定Java类型。halo基于spring-mvc现有的机制,扩展了输入参数注解,返回值注解,方法注解。

输入参数的扩展注解

注解名称

样例

功能说明

@CurrentSession

List<UserInfo> listUser(@CurrentSession Session session)

可获取当前请求的Session,框架会自动将Session对象注入到方法中。

@RequestJsonParam

方式一: UserInfo bindModelFromPostRequestJsonParam(@RequestJsonParam("userInfo") UserInfo userInfo);url格式为:http://XXX/XXX?userInfo=json字符串

要求传入特定标识的参数,并且参数值按照JSON格式序列化。

@RequestJsonParam

方式二: UserInfo bindModelFromGetRequestJsonParamMap(@RequestJsonParam(type = RequestJsonType.DATA_MAP) UserInfo userInfo);url格式为:http://XXX/XXX

要求传入一个K-V集合,集合内元素如果要嵌套类型,可以按照JSON格式序列化。

返回值的扩展注解

通过@ResponseMessage标记,方法的返回值会以com.halo.core.message.model. ResponseMessage的序列化JSON字符串作为返回,针对每个方法的业务数据返回值,会被封装到ResponseMessage.data中。这样在前端JS处理时,可以通过读取ResponseMessage.data获取到真实的业务数据。

@ResponseMessage
List<UserInfo> listUser(@CurrentSession Session session)

spring-mvc自带的方法注解

通过@RequestMapping,可以对方法声明上的资源访问路径进行描述描述。其中,method属性标识方法映射为HTTP的METHOD类型。value属性描述该方法映射为HTTP的URL路径地址。

为了保证应用系统在不同J2EE容器的兼容性,halo框架建议开发者只采用GETPUT两种作为数据交互的METHOD类型。

@RequestMapping(method = RequestMethod.GET, value = "/list")
public
@ResponseMessage
List<UserInfo> listUser(@CurrentSession Session session)

错误处理

为了能够让每个@Controller注解类中的方法在抛出异常时可以正确的捕获,并按照统一的格式输出至浏览器,框架通过spring-mvc的拦截器将异常捕获后,会将格式化后的错误信息封装到com.halo.core.message.model. ResponseMessage中,以JSON格式反馈给前台页面。

在文档的 异常处理 章节只中对Java异常的格式化操作规范做说明。

Last updated