• 如何开发一个java开源框架-----Jvn框架之实现自动生成在线文档(第七讲)


    一 、

    前言:博主正在教大家如何开发一个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=" 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>
    

      

  • 相关阅读:
    主机与虚拟机之间的网络连接
    QT下过多点的曲线绘制
    C++返回对象和返回引用
    STS MVC与MyBatis的结合
    STS中依赖项的设置
    STS中MyBatis的基本实现
    STS中不同包但相同类名引起的问题:A component required a bean of type 'javax.activation.DataSource' that could not be found
    STS中AOP的实现
    STS如何将一个文件夹设置缺省的创建路径(build path)
    ARB扩展与标准OpenGL的关系
  • 原文地址:https://www.cnblogs.com/everxs/p/4553361.html
Copyright © 2020-2023  润新知