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
自带的方法注解
spring-mvc
自带的方法注解通过@RequestMapping
,可以对方法声明上的资源访问路径进行描述描述。其中,method
属性标识方法映射为HTTP的METHOD
类型。value
属性描述该方法映射为HTTP的URL路径地址。
为了保证应用系统在不同J2EE容器的兼容性,halo框架建议开发者只采用
GET
,PUT
两种作为数据交互的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