Skip to content

Commit 2f79de4

Browse files
committed
back
1 parent c62af9b commit 2f79de4

File tree

21 files changed

+450
-594
lines changed

21 files changed

+450
-594
lines changed

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,8 @@ dependencies {
3131
annotationProcessor "org.projectlombok:lombok:1.16.16"
3232
implementation 'com.github.javaparser:javaparser-symbol-solver-core:3.14.4-SNAPSHOT'
3333

34+
// https://mvnrepository.com/artifact/org.springframework/spring-webmvc
35+
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.1.3.RELEASE'
36+
compile group: 'org.springframework', name: 'spring-context', version: '2.0.5'
37+
3438
}

spring-api-demo/src/main/java/com/hsjfans/api/demo/controllers/BookController.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.hsjfans.api.demo.controllers;
22

33
import com.hsjfans.api.demo.models.Book;
4-
import org.springframework.web.bind.annotation.PostMapping;
5-
import org.springframework.web.bind.annotation.RequestMapping;
6-
import org.springframework.web.bind.annotation.RestController;
4+
import org.springframework.web.bind.annotation.*;
5+
6+
import java.util.List;
77

88
/**
99
* @name 书籍相关接口
@@ -24,4 +24,25 @@ public Book createBook(Book book){
2424
return null;
2525
}
2626

27+
28+
/**
29+
* @name 通过id查询数据
30+
* @param bookId the bookId
31+
* @return the book
32+
*/
33+
@GetMapping(value = "/{bookId}")
34+
public Book queryBook(@PathVariable int bookId){
35+
return null;
36+
}
37+
38+
39+
/**
40+
* @name 获取全部书籍
41+
* @return list
42+
*/
43+
@GetMapping
44+
public List<Book> queryBooks(){
45+
return null;
46+
}
47+
2748
}

spring-api-demo/src/test/java/com/hsjfans/api/demo/controllers/BookControllerTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.hsjfans.api.demo.controllers;
22

3+
import com.hsjfans.api.demo.models.Book;
34
import org.junit.Test;
45

6+
import java.lang.reflect.Parameter;
7+
58
/**
69
* @author hsjfans[hsjfans.scholar@gmail.com]
710
*/
@@ -12,6 +15,9 @@ public class BookControllerTest {
1215
public void createBoolTest(){
1316

1417

18+
Parameter parameter = BookController.class.getMethods()[0].getParameters()[0];
19+
20+
System.out.println(parameter);
1521

1622
}
1723

src/main/java/com/hsjfans/github/Booter.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,16 @@ public class Booter {
1818

1919
public static void main(String[] args) throws ParserException {
2020

21-
String realPath = "/Volumes/doc/projects/java/api";
21+
String realPath = "/Volumes/doc/projects/java/java-api-doc/spring-api-demo";
2222
Config config = new Config();
2323
config.setPackageName(realPath);
24-
config.setDocName("接口文档");
25-
config.setApiName("api");
24+
config.setDocName("demo接口文档");
25+
config.setApiName("demo");
2626
Parser parser = new SpringParser(config);
2727
ApiTree apiTree = parser.parse(config.getPackageName(),true);
2828
Generator generator = new HtmlGenerator();
2929
generator.from(apiTree,config);
3030

3131
}
32-
33-
// public static void main(String[] args) throws ParserException {
34-
//
35-
// String realPath = args[0];
36-
// Config config = new Config();
37-
// config.setPackageName(realPath);
38-
// config.setDocName(args[1]);
39-
// config.setApiName(args[2]);
40-
// Parser parser = new SpringParser(config);
41-
// ApiTree apiTree = parser.parse(config.getPackageName(),true);
42-
// Generator generator = new HtmlGenerator();
43-
// generator.from(apiTree,config);
44-
//
45-
// }
4632
}
4733

src/main/java/com/hsjfans/github/generator/HtmlGenerator.java

Lines changed: 97 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ public void from(ApiTree apiTree, Config config) {
8080
controllerClass -> {
8181
controllerList.append(String.format("\n <li style=\"padding:5px\" > <a href=\"%s\" >%s</a> <span> %s </span> </li>"
8282
,"./"+controllerClass.getName()+".html",controllerClass.getName(),controllerClass.getDescription()));
83+
84+
// 开始构建的 controller 文件
8385
buildControllerDoc(controllerClass);
8486
}
8587
);
@@ -93,43 +95,58 @@ public void from(ApiTree apiTree, Config config) {
9395
}
9496

9597

98+
/**
99+
* 构建 controllerClass 文件
100+
* @param controllerClass controller
101+
*/
96102
@Override
97103
protected void buildControllerDoc(ControllerClass controllerClass) {
98104

105+
System.out.println(controllerClass);
99106
StringBuilder controllerHtml = new StringBuilder();
100107
String controller = FileUtil.from(BASE_TPL_PATH+controllerTpl);
101-
// controller = controller.replace("${api-url-description}",controllerClass.getName());
102108
controller = controller.replace("${controller-name}",controllerClass.getName());
103109
controller = controller.replace("${count}",String.valueOf(controllerClass.getControllerMethod().size()));
104110
controller = controller.replace("${controller-description}",controllerClass.getDescription());
105111
controller = controller.replace("${author}",controllerClass.getAuthor());
106112
controller = controller.replace("${baseUrl}", StringUtil.join(controllerClass.getUrl(),","));
107113
controllerClass.getControllerMethod().forEach(controllerMethod -> {
108-
109-
// System.out.println( controllerMethod );
110-
114+
// 填充 列表
111115
controllerHtml.append(String.format("\n <li style=\"padding:5px\"> <a href=\"%s\" >%s</a> <span> %s </span> </li>"
112116
,"./"+controllerClass.getName()+"_"+controllerMethod.getName()+".html",controllerMethod.getName(),controllerMethod.getName()));
117+
118+
// 构建 api 详情
113119
buildApiDoc(controllerClass,controllerMethod);
114120
});
121+
115122
controller = controller.replace("${controller-methods}",controllerHtml.toString());
123+
124+
// 生成文件
116125
FileUtil.to(this.config.getOutPath()+controllerClass.getName()+".html",controller);
117126
}
118127

128+
129+
/**
130+
* 构建详细的 api 文件
131+
* @param controllerClass
132+
* @param controllerMethod
133+
*/
119134
@Override
120135
protected void buildApiDoc(ControllerClass controllerClass, ControllerMethod controllerMethod) {
121136

137+
System.out.println(controllerClass);
138+
122139
String method = FileUtil.from(BASE_TPL_PATH+urlTpl);
123140
method = method.replace("${title}",controllerMethod.getName());
124141
method = method.replace("${api-url-name}",controllerMethod.getName());
125142
method = method.replace("${prev-name}",controllerClass.getName());
126143
method = method.replace("${prev-url}",controllerClass.getName()+".html");
127144
if(controllerClass.getUrl().length==0){
128145
controllerClass.setUrl(new String[]{""});
129-
}
130-
if(controllerMethod.getUrl().length==0){
146+
} else if(controllerMethod.getUrl().length==0){
131147
controllerMethod.setUrl(new String[]{""});
132148
}
149+
133150
String[] urls = new String[controllerClass.getUrl().length*controllerMethod.getUrl().length];
134151
int i=0;
135152
for(String baseUrl:controllerClass.getUrl()){
@@ -141,47 +158,59 @@ protected void buildApiDoc(ControllerClass controllerClass, ControllerMethod con
141158
method = method.replace("${api-url-description}",controllerMethod.getDescription());
142159
method = method.replace("${methods}", CollectionUtil.requestMethodsToString(controllerMethod.getMethods()));
143160
method = method.replace("${author}",controllerMethod.getAuthor());
144-
method = method.replace("${requestParams}", generateRequestParams(controllerMethod.getParams()));
161+
method = method.replace("${requestParams}", generateRequestParams(controllerMethod.getRequestParameters()));
145162
method = method.replace("${responses}", generateResponseReturn(controllerMethod.getResponseReturn()));
146163

147164

148165
FileUtil.to(this.config.getOutPath()+controllerClass.getName()+"_"+controllerMethod.getName()+".html",method);
149166
}
150167

151168

152-
private String generateRequestParams(List<ClassField> requestParams){
169+
/**
170+
* 构建请请求参数 页面
171+
* @param requestParams requestParams
172+
* @return
173+
*/
174+
private String generateRequestParams(List<RequestParameter> requestParams){
153175
StringBuilder params = new StringBuilder();
154176
requestParams.forEach(requestParam->{
155-
if(requestParam.getFields()!=null&&requestParam.getFields().size()>0){
177+
System.out.println(" requestParam= "+requestParam);
178+
if(requestParam.getFields()==null||requestParam.getFields()!=null&&requestParam.getEnumValues()!=null){
179+
params.append(String.format(Request_Params_Table_No_head,requestParam.getName(),requestParam.getTypeName(),
180+
StringUtil.enumToStrs(requestParam.getEnumValues()),!requestParam.isNullable(),requestParam.isFuzzy(),
181+
requestParam.getDescription()));
182+
}else {
156183
params.append(String.format(Request_Params_Table_No_head,
157184
requestParam.getName(),
158-
Request_Params_Table_head.replace("${requestParams}",generateRequestParams(requestParam.getFields())),
185+
Request_Params_Table_head.replace("${requestParams}",generateClassFields(requestParam.getFields(),false)),
159186
StringUtil.enumToStrs(requestParam.getEnumValues()),!requestParam.isNullable(),requestParam.isFuzzy(),
160187
requestParam.getDescription()
161-
));
162-
}else {
163-
params.append(String.format(Request_Params_Table_No_head,requestParam.getName(),requestParam.getType(),
164-
StringUtil.enumToStrs(requestParam.getEnumValues()),!requestParam.isNullable(),requestParam.isFuzzy(),
165-
requestParam.getDescription()));
188+
));
166189
}
190+
167191
});
168192

169193
return params.toString();
170194

171195
}
172196

197+
198+
/**
199+
* 构建返回值 页面
200+
* @param responseReturn
201+
* @return
202+
*/
173203
private String generateResponseReturn(ResponseReturn responseReturn){
174204

175205
StringBuilder responses = new StringBuilder();
176206

177207
if(responseReturn.getReturnItem()!=null&&responseReturn.getReturnItem().size()>0){
178208
responses.append(String.format(Response_Return_Table_No_Head,
179209
responseReturn.getName(),
180-
Response_Return_Table_Head.replace("${responses}",generateResponseItems(responseReturn.getReturnItem())),
210+
Response_Return_Table_Head.replace("${responses}",generateClassFields(responseReturn.getReturnItem(),true)),
181211
StringUtil.enumToStrs(responseReturn.getEnumValues()),
182212
responseReturn.getDescription()
183213
));
184-
// responses.append(Response_Return_Table_Head.replace("${responses}",generateResponseItems(responseReturn.getReturnItem())));
185214
}else {
186215
responses.append(String.format(Response_Return_Table_No_Head,
187216
responseReturn.getName(),
@@ -192,27 +221,62 @@ private String generateResponseReturn(ResponseReturn responseReturn){
192221
return responses.toString();
193222
}
194223

195-
private String generateResponseItems(List<ClassField> requestParams){
196-
StringBuilder responses = new StringBuilder();
197-
requestParams.forEach(requestParam -> {
198-
if(requestParam.getFields()!=null&&requestParam.getFields().size()>0){
199-
responses.append(String.format(Response_Return_Table_No_Head,
200-
requestParam.getName(),
201-
Response_Return_Table_Head.replace("${responses}",generateResponseItems(requestParam.getFields())),
202-
StringUtil.enumToStrs(requestParam.getEnumValues()),
203-
requestParam.getDescription()
204-
));
224+
225+
/**
226+
* 构建 classFields 文件
227+
* @param classFields classFileds
228+
* @return
229+
*/
230+
private String generateClassFields(List<ClassField> classFields,boolean response){
231+
232+
StringBuilder params = new StringBuilder();
233+
classFields.forEach(classField->{
234+
if(classField.getFields()==null||classField.getFields()!=null&&classField.getEnumValues()!=null){
235+
if(response){
236+
params.append(String.format(Response_Return_Table_No_Head,
237+
classField.getName(),
238+
classField.getType(),
239+
StringUtil.enumToStrs(classField.getEnumValues()),
240+
classField.getDescription()));
241+
}else {
242+
params.append(String.format(Request_Params_Table_No_head,
243+
classField.getName(),
244+
classField.getType(),
245+
StringUtil.enumToStrs(classField.getEnumValues()),
246+
!classField.isNullable(),classField.isFuzzy(),
247+
classField.getDescription()));
248+
}
249+
205250
}else {
206-
responses.append(String.format(Response_Return_Table_No_Head,
207-
requestParam.getName(),
208-
requestParam.getType(),
209-
StringUtil.enumToStrs(requestParam.getEnumValues()),
210-
requestParam.getDescription()));
251+
if(response){
252+
params.append(String.format(Response_Return_Table_No_Head,
253+
classField.getName(),
254+
Response_Return_Table_Head.replace("${responses}",generateClassFields(classField.getFields(),true)),
255+
StringUtil.enumToStrs(classField.getEnumValues()),
256+
classField.getDescription()
257+
));
258+
}else {
259+
params.append(String.format(Request_Params_Table_No_head,
260+
classField.getName(),
261+
Request_Params_Table_head.replace("${requestParams}",generateClassFields(classField.getFields(),false)),
262+
StringUtil.enumToStrs(classField.getEnumValues()),!classField.isNullable(),classField.isFuzzy(),
263+
classField.getDescription()
264+
));
265+
}
211266
}
267+
212268
});
213-
return responses.toString();
269+
270+
return params.toString();
271+
214272
}
215273

274+
275+
276+
277+
278+
279+
216280
@Override
217281
protected void buildExtraDoc() {
218282
String extra = FileUtil.from(BASE_TPL_PATH+extraTpl);

src/main/java/com/hsjfans/github/model/ApiTree.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
package com.hsjfans.github.model;
22

3-
import com.google.common.collect.Maps;
3+
44
import com.google.common.collect.Sets;
55
import lombok.Data;
6-
import org.springframework.stereotype.Controller;
7-
import org.springframework.web.bind.annotation.PatchMapping;
8-
import org.springframework.web.bind.annotation.RequestMapping;
9-
import org.springframework.web.bind.annotation.RequestMethod;
6+
107

118
import java.io.Serializable;
129
import java.util.Collection;
13-
import java.util.Map;
1410
import java.util.Set;
15-
import java.util.concurrent.ConcurrentMap;
11+
1612

1713
/**
1814
* @author hsjfans[hsjfans.scholar@gmail.com]

src/main/java/com/hsjfans/github/model/ClassField.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ public class ClassField implements Serializable {
5858
private boolean nullable = false;
5959

6060

61+
/**
62+
* is list or not
63+
*/
64+
private boolean array = false;
65+
66+
67+
/**
68+
* is enumType or not
69+
*/
70+
private boolean enumType = false;
71+
6172

6273
/**
6374
* the description

src/main/java/com/hsjfans/github/model/ControllerMethod.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ public class ControllerMethod implements Serializable {
2222
*
2323
* the method url
2424
*/
25-
private String[] url =new String[]{""};
25+
private String[] url ={" "};
2626

2727
/**
2828
* the method name `@name`
2929
**/
30-
private String name;
30+
private String name = "";
3131

3232

3333
/**

0 commit comments

Comments
 (0)