掌柜大作战(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
- 掌柜大作战(3):SpringMVC中只对外暴露1个Controller
- 掌柜大作战(25):健身房签到系统,多线程使用不当造成的1个严重bug
- 掌柜大作战(1):人民的美梦,群众的水乡
- 掌柜大作战(2):京东Redis服务的使用
- 掌柜大作战(14):京东Web安全经验总结-客户端安全
- 掌柜大作战(15):营业执照图片识别,有点尴尬
- 掌柜大作战(19):京东和企业信息化
- 掌柜大作战(21):京东线上数据库管理
- 掌柜大作战(23):京东Me,移动办公,应有尽有
- 掌柜大作战(24):京东红绿灯监控报警系统
- 掌柜大作战(16):Java中定义常量的4种形式,总有一种适合你
- SpringMVC中一个Controller多个方法
- 掌柜大作战(4):京东统一登录服务,外网和内网
- 掌柜大作战(5):使用AOP,统一记录方法执行所花的时间
- 掌柜大作战(6):Spring+Mybatis+多数据源配置+事务配置
- 掌柜大作战(8):京东消息中间件JMQ的配置和使用
- 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命
- 掌柜大作战(11):京东安全-开源组件漏洞在线检测平台
- enable kdump on fedora server 27
- C++风格_const用法
- 无题
- 8、16、32-BIT系列单片机区别与特点
- 置 IDEA 中的 Tab 键为 4 个空格
- 掌柜大作战(3):SpringMVC中只对外暴露1个Controller
- golang写的反弹shell(自作孽不可活,切记,切记!)
- eclipse断点debug使用入门,
- 0-1背包问题:(回溯算法)
- 通过函数从四个方向输出九九乘法表
- 安卓开发-拨打电话实例
- Android_Popupwindow
- C++风格_constexpr
- Oracle Advanced Support系统SQL注入漏洞挖掘经验分享