maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第二部分)
来源:互联网 发布:计算机与网络 期刊 编辑:程序博客网 时间:2024/06/05 16:39
第二部分:构建响应http的请求的统一接入API配置和接口提炼
以上的三个步骤:
1.搭建起了maven项目;
2.根据数据库生成了代码,别说你没有安装过和设计数据库;
3.构建代码和数据库之间的ORM关联管理;
1.搭建起了maven项目;
2.根据数据库生成了代码,别说你没有安装过和设计数据库;
3.构建代码和数据库之间的ORM关联管理;
4.通过Java反射,得到注解的接口
OK,可以写接口了:springMVC响应http请求的统一接入API:
第一步:配置springMVC
在项目启动文件web.xml中加入代码(web.xml的标签排序可以作为知识点看一下):
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
知道为啥springMVC是servlet的变种了吧!
附:
<load-on-startup>1</load-on-startup>:当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;详解的话,自己度一下;
<url-pattern>/</url-pattern>:因为这个反斜杠“/”不能丢,其实为了过滤请求;
接口伪代码流程(为啥是伪代码,这里就是很一般的写法,给人参考吧):
/**@Controller:声明是springMVC的响应组件@RequestMapping(value = "/apicenter"):定义接口路径 */@Controllerpublic class ApiDispatchController {private final Log loger = LogFactory.getLog(ApiDispatchController.class);//加载日志部分private static final String API_ID = "apiId";private static final String ACCESS_TOKEN = "token";private static final String FUNCTION_CODE = "functioncode"; @SuppressWarnings({ "rawtypes" }) @RequestMapping(value = "/apicenter") public String apiDispatch(HttpServletRequest req, HttpServletResponse rsp) { ApiResponse apiRsp = null; try { ApiRequest apiReq = new ApiRequest(); ApiRequest sysReq = new ApiRequest(); Enumeration em = req.getParameterNames();//获取请求参数 while (em.hasMoreElements()) { String name = (String) em.nextElement(); if (API_ID.equals(name) || FUNCTION_CODE.equals(name) || ACCESS_TOKEN.equals(name)) { sysReq.put(name, req.getParameter(name)); } String value = req.getParameter(name); apiReq.put(name, value); } apiRsp = this.checkParam(sysReq);//验证(一般是验证签名) if (apiRsp != null) { return this.outputApiResponse(req, rsp, apiRsp); } apiReq.setApiId(req.getParameter(API_ID)); apiReq.setAccessToken(req.getParameter(ACCESS_TOKEN)); apiReq.setFunctionCode(req.getParameter(FUNCTION_CODE)); apiReq.setRequest(req); apiReq.setResponse(rsp); String functioncode = req.getParameter(FUNCTION_CODE); String[] tempArr = functioncode.split("\\.");// 目录暂时以这种方法反射 if (tempArr != null && tempArr.length > 0) { String serviceFunctionCode = tempArr[0]; Object bean = SpringBeanProxy.getBeanByFunctionCode(serviceFunctionCode); Method method = SpringBeanProxy.getMethodByFunctionCode(functioncode); try { Object rspObj = method.invoke(bean, new Object[] { apiReq }); if (rspObj instanceof ApiResponse) { apiRsp = (ApiResponse) rspObj; } } catch (Exception e) { e.printStackTrace();//打印异常 apiRsp = new ApiResponse(RestResultEnum.INVOKE_ERROR); } } } catch (Exception e) { e.printStackTrace(); } if (apiRsp == null) { apiRsp = new ApiResponse(RestResultEnum.UNKNOW_ERROR); } return this.outputApiResponse(req, rsp, apiRsp);//构建返回 }
这么一句代码:
Object rspObj = method.invoke(bean, new Object[] { apiReq });
科普下:JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:
也就是说代码在任意个类中找到对应的对象和方法,然后返回的Object 是ApiResponse。处理掉ApiResponse就可以结束了。
优点(其实说的是第一步的接口):
1.极易拓展;
总结:
在四个步骤后,会发现只要配置完springmvc的配置信息和第一步中的读取自定义的注解接口,和这个响应http请求的API,就可以无限拓展接口地址了;
贴一段请求和返回报文:
请求参数:(form格式转化后的可视化数据)
{apiId=sanVersion, content=内容, functioncode=jpush.insertJpush, title=推送标题, appId=1, token=a6c799eaaa901055df2732d887499d7f, alert=推送标题描述}
返回值:(json格式化处理了)
{"code":"0000","functioncode":"jpush.insertJpush","isSuccess":true,"msg":"成功","version":"1.0"}
想知道token的目的性么 ?我以后来讲一段......
0 0
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第二部分)
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第一部分)
- maven 项目(五) spring集成springMVC开发统一接入API--实现test接口
- MVC架构Maven项目(四)SpringMVC集成
- J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(2)多个第三方服务端接入之云旺IM
- Mybatis开发--SpringMVC-Mybatis-Maven项目整合(四)
- Spring+SpringMVC+Mybatis配置(Maven项目)
- Shiro权限控制框架 ---SpringMVC+Spring+My batis+Mysql+Maven集成开发Web项目
- 四、maven项目搭建 springmvc+ spring + mybatis(ssm框架搭建完成)
- 三、maven项目搭建 springmvc+ spring + mybatis(springmvc搭建)
- ActiveMq 自学(四) 集成SpringMvc+Spring框架
- eclipse 下搭建 maven项目。spring+springMvc+mybatise框架集成
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制
- 项目Maven集成spring+springMVC所用jar包
- Spring+SpringMVC+Mybatis+Restful+Maven多模块项目集成
- maven项目springMVC+spring+mybatis集成,实现人员登陆
- J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构
- maven spring springmvc 项目
- centos 7 yum install mysql 安装mariadb 后 mysql 无法启动的解决方法
- HBase客户端访问超时的多个因素及参数
- PHP单例模式与常驻内存
- 亚稳态
- Jquery validate 静态方法和常用方法的使用
- maven 项目(四) spring集成springMVC开发统一接入API(准备工作:第二部分)
- context解释
- Linux笔记(35)——yum在线安装
- Android网络问题
- 两台centos之间传送文件
- 自定义view(二)
- php全局变量的内存管理
- dispaly:table布局
- 台球类html5游戏的AI设计与核心算法的实现