掌柜大作战(3):SpringMVC中只对外暴露1个Controller

来源:互联网 发布:stc单片机rst电路原理 编辑:程序博客网 时间:2024/04/27 18:46
最近执行“掌柜大作战”计划,研究一个同事代码的时候,看到了一点新想法、新实践。
新思路,在给移动端提供接口数据时,非常好用,值得点赞。

SpringMVC项目中,配置Controller响应Web请求。
1、通常的做法
UserController:用户相关请求
@Controllerpublic class UserController{    @RequestMapping("/listUser")    @ResponseBody    public Object listUser(@RequestParam("callback") String jsonp,                            @RequestParam("body") String body) {          return userService.listUser();    }}

ProductController:商品相关请求
OrderController:订单相关请求

2、对外只暴露1个Controller
@Controllerpublic class DispatcherController{     @Resource    private Map<String, BaseAction> execActions; @RequestMapping("/one.{actionName}")    @ResponseBody    public Object doExecute(@PathVariable String actionName,                            @RequestParam("callback") String jsonp,                            @RequestParam("body") String body) {        BaseAction action = execActions.get(actionName);         if (action != null) {              //loginContext 登录上下文              //设备参数                actionResult = action.execute(ctx, clientInfo, loginContext);               return actionResult ;       }    }}


/**
* 基础Controller 使用抽象类 ,是考虑以后可能要用一些简单的过滤器
*
* */
public abstract class BaseAction {    public abstract Result execute() throws Exception;}public class UserAction extends BaseAction{    public Result execute() {          return userService.listUser();    }}public class OrderAction  extends BaseAction{    public Result execute() {          return null;    }}


<bean id="execActionss" class="java.util.HashMap">        <constructor-arg>            <map>                <entry key="one.userAction">                    <bean class="UserAction"/>                </entry>                <entry key="one.productAction">                    <bean class="ProductAction"/>                </entry>                 <entry key="one.orderAction">                    <bean class="OrderAction"/>                </entry></bean>

有以下好处:
a.登录上下文,统一处理
b.接口是否需要认证, 统一处理
c.设备参数,统一封装
d.日志、方法监控
e.返回数据格式
除此之外,代码特别清晰,一整个流程下来,所有逻辑都看得到。
而之前的模式,各种AOP拦截器、通用工具类,有种打断人思路的感觉。

特别适用的场景:
给移动端提供标准JSON格式的数据,没有页面。
如果存在页面,还需要再统一封装一个。
另外,对外生成的接口文档,不能再使用Spring Swagger这种自动生成工具,而是
Controler标准参数说明+具体Action方法的JavaDoc文档。

弊端:
UserAction等具体代码中,需要从Request中根据参数名字,比如“userName”取自己需要的参数。

阅读全文
0 1
原创粉丝点击