一 、
前言:博主正在教大家如何开发一个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 loadClass(Map map){
List onlineList = new ArrayList();
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 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" %>
在线生成文档
访问的url 描述 参数/说明 访问方式
http://www.baidu.com/jvn${online.url}
${online.memo}
${online.param}
${online.method}