一 、
前言:博主正在教大家如何開發一個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>
