zoukankan      html  css  js  c++  java
  • 如何开发一个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>
    

      

  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/everxs/p/4553361.html
Copyright © 2011-2022 走看看