前言: 博主正在教大家如何开发一个 javaEE 框架,我把框架命名为 Jvn ,博客里有完整的开发视频,每一篇博文都是一个知识点;
关于框架的介绍和学习,可以从我博客第一讲开始看起,博客首页:http://www.cnblogs.com/everxs/
本次内容视频以及源码下载地址: http://pan.baidu.com/s/1o6MJnFc
二、
本次博客讲的内容
场景:现在是APP时代,APP很热门,而且跟后台交互跑的都是HTTP协议,所以讲到这里,对于这里面的交互。
安卓工程师(客户端),在调用后台接口的时候,需要一个文档,二后台工程师(这里用JAVA),要去维护这份文档,或者
说手写这份文档,工作量跟维护量是非常大的。所以提出了一个想法,在线文档能否自动生成了。
解决思路 :
1,在我们的Controller上面加一个注解@OnlineController同时指定被注解Controller的用途 memo="用户管理控制器",该COntroller的URL
2,在我们具体的Action,也就是我们Controller里面的方法里面加一个@OnlineMethod注解,同时指定 method="访问方式(GET或者POST)",memo="方法描述",
param="调用该接口需要的参数比如:name=XXX&age=XXX",该接口的URL
3,把这些信息保存进我们的List里面,启动框架的时候设进一个List.
4,使用者可以定义一个Controller获取该list在页面显示出来
本次视频跟源码的下载地址: http://pan.baidu.com/s/1o6MJnFc
建议看视频,因为我在视频里讲得很详细。
Ps:视频跟代码都会持续更新,希望大家喜欢,多多支持。
QQ:245223343 永远的八哥
下面是一些代码:
OnlineController:
/**| * 在线文档Controller注解 * @author Administrator * */ @Retention(RetentionPolicy.RUNTIME) public @interface OnlineController { String memo(); }
OnlineMethod:
/** * 在线文档的方法注解 * @author Administrator * */ @Retention(RetentionPolicy.RUNTIME) public @interface OnlineMethod { String memo(); String param(); String method(); }
Online实体类:
public class Online { private String url; private String memo; private String method; private String param; private int type; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public String getParam() { return param; } public void setParam(String param) { this.param = param; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
OnlineDoc 操作类:
public class OnlineDoc { /** * 加载有注解的Controller */ public static List<Online> loadClass(Map<String,Class> map){ List<Online> onlineList = new ArrayList<Online>(); System.out.println("map :"+map.size()); for(String nameSpace :map.keySet()){ Class clazz = map.get(nameSpace); OnlineController onlineController = (OnlineController) clazz.getAnnotation(OnlineController.class); if(onlineController!=null){ System.out.println("进来"); Online online = new Online(); online.setType(1); online.setMemo(onlineController.memo()); online.setUrl(nameSpace); onlineList.add(online); Method[] methods = clazz.getMethods(); for(Method method :methods){ OnlineMethod onlineMethod = method.getAnnotation(OnlineMethod.class); if(onlineMethod!=null){ Online o = new Online(); o.setMemo(onlineMethod.memo()); o.setMethod(onlineMethod.method()); o.setParam(onlineMethod.param()); o.setType(2); o.setUrl(nameSpace+"/"+method.getName()); onlineList.add(o); } } } } System.out.println("执行完 有多少个:"+onlineList.size()); return onlineList; } }
最后是配置在线文档:
public class OnlineDocController extends JvnController{ public void index(){ List<Online> onlineList = JvnConfig.CONSTANT.getOnlineList(); System.out.println("size :" +onlineList.size()); getRequest().setAttribute("onlineList", onlineList); render("/WEB-INF/views/online/index.jsp"); } }
测试Controller:
@OnlineController(memo = "订单管理控制器") public class OrderController extends JvnController{ @OnlineMethod(memo = "增加订单", method = "GET", param = "订单id orderId") public void add(){ } @OnlineMethod(memo = "删除订单", method = "GET", param = "订单id orderId") public void delete(){ } }
在线文档的jsp:
<%@page import="com.jvn.doc.online.Online"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css"> <!-- jQuery文件。务必在bootstrap.min.js 之前引入 --> <script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="http://cdn.bootcss.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> </head> <body> <h1>在线生成文档</h1> <div style="width: 70%;margin: 0,auto;"> <table class="table"> <tr><th>访问的url</th><th>描述</th><th>参数/说明</th><th>访问方式</th></tr> <c:forEach var="online" items="${onlineList}"> <tr> <td>http://www.baidu.com/jvn${online.url}</td> <td>${online.memo}</td> <td>${online.param}</td> <td>${online.method}</td> </c:forEach> </tr> </table> </div> </body> </html>