如何开发一个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="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>

  

你可能感兴趣的:(java)