Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d2b2a31

Browse files
committed
add test and fix bug
1 parent f60a502 commit d2b2a31

File tree

13 files changed

+345
-19
lines changed

13 files changed

+345
-19
lines changed

‎settings.gradle‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
rootProject.name = 'java-api-doc'
2+
include 'spring-api-demo'
23

‎spring-api-demo/build.gradle‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
plugins {
2+
id 'java'
3+
}
4+
5+
group 'com.hsjfans.github'
6+
version '1.0-SNAPSHOT'
7+
8+
sourceCompatibility = 1.8
9+
10+
repositories {
11+
mavenLocal()
12+
mavenCentral()
13+
}
14+
15+
dependencies {
16+
testCompile group: 'junit', name: 'junit', version: '4.12'
17+
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.1.3.RELEASE'
18+
compile group: 'org.springframework', name: 'spring-context', version: '2.0.5'
19+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.hsjfans.api.demo.controllers;
2+
3+
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;
7+
8+
/**
9+
* @name 书籍相关接口
10+
* @author hsjfans[hsjfans.scholar@gmail.com]
11+
*/
12+
@RestController
13+
@RequestMapping(value = "/books")
14+
public class BookController {
15+
16+
17+
/**
18+
* @name 创建书籍
19+
* @param book book
20+
* @return new book
21+
*/
22+
@PostMapping(value = "")
23+
public Book createBook(Book book){
24+
return null;
25+
}
26+
27+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.hsjfans.api.demo.models;
2+
3+
import java.io.Serializable;
4+
5+
/**
6+
* @name 书籍
7+
* 书籍实体
8+
* @author hsjfans[hsjfans.scholar@gmail.com]
9+
*/
10+
public class Book implements Serializable {
11+
12+
/**
13+
* @ignore 忽略
14+
*/
15+
private String name;
16+
17+
// isbn 号
18+
private String isbn;
19+
20+
// 价格
21+
private int price;
22+
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.hsjfans.api.demo.controllers;
2+
3+
import org.junit.Test;
4+
5+
/**
6+
* @author hsjfans[hsjfans.scholar@gmail.com]
7+
*/
8+
public class BookControllerTest {
9+
10+
11+
@Test
12+
public void createBoolTest(){
13+
14+
15+
16+
}
17+
18+
}

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,11 @@ private String generateRequestParams(List<RequestParam> requestParams){
150150
StringBuilder params = new StringBuilder();
151151
requestParams.forEach(requestParam->{
152152
if(requestParam.getParams()!=null&&requestParam.getParams().size()>0){
153-
params.append(String.format(Union_No_head,
153+
params.append(String.format(Request_Params_Table_No_head,
154154
requestParam.getName(),
155-
Request_Params_Table_head.replace("${requestParams}",generateRequestParams(requestParam.getParams()))
155+
Request_Params_Table_head.replace("${requestParams}",generateRequestParams(requestParam.getParams())),
156+
StringUtil.enumToStrs(requestParam.getEnumValues()),requestParam.isNecessary(),requestParam.isFuzzy(),
157+
requestParam.getDescription()
156158
));
157159
}else {
158160
params.append(String.format(Request_Params_Table_No_head,requestParam.getName(),requestParam.getType(),
@@ -170,9 +172,11 @@ private String generateResponseReturn(ResponseReturn responseReturn){
170172
StringBuilder responses = new StringBuilder();
171173

172174
if(responseReturn.getReturnItem()!=null&&responseReturn.getReturnItem().size()>0){
173-
responses.append(String.format(Union_No_head,
175+
responses.append(String.format(Response_Return_Table_No_Head,
174176
responseReturn.getName(),
175-
Request_Params_Table_head.replace("${requestParams}",generateRequestParams(responseReturn.getReturnItem()))
177+
Response_Return_Table_Head.replace("${responses}",generateResponseItems(responseReturn.getReturnItem())),
178+
StringUtil.enumToStrs(responseReturn.getEnumValues()),
179+
responseReturn.getDescription()
176180
));
177181
// responses.append(Response_Return_Table_Head.replace("${responses}",generateResponseItems(responseReturn.getReturnItem())));
178182
}else {
@@ -189,11 +193,12 @@ private String generateResponseItems(List<RequestParam> requestParams){
189193
StringBuilder responses = new StringBuilder();
190194
requestParams.forEach(requestParam -> {
191195
if(requestParam.getParams()!=null&&requestParam.getParams().size()>0){
192-
responses.append(String.format(Union_No_head,
196+
responses.append(String.format(Response_Return_Table_No_Head,
193197
requestParam.getName(),
194-
Request_Params_Table_head.replace("${requestParams}",generateRequestParams(requestParam.getParams()))
198+
Response_Return_Table_Head.replace("${responses}",generateResponseItems(requestParam.getParams())),
199+
StringUtil.enumToStrs(requestParam.getEnumValues()),
200+
requestParam.getDescription()
195201
));
196-
responses.append(Response_Return_Table_Head.replace("${responses}",generateResponseItems(requestParam.getParams())));
197202
}else {
198203
responses.append(String.format(Response_Return_Table_No_Head,
199204
requestParam.getName(),

‎src/main/java/com/hsjfans/github/parser/SpringParser.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ protected Set<CompilationUnit> getAllControllerClass(Set<File> javaFiles) {
8383
protected void parseCompilationUnit(CompilationUnit compilationUnit,final Set<ControllerClass> controllerClasses) {
8484
compilationUnit.getPrimaryType().ifPresent(typeDeclaration ->
8585
{
86+
LogUtil.info(" start parse typeDeclaration %s ",typeDeclaration.getName());
8687
ControllerClass controllerClass ;
8788
List<AnnotationExpr> annotationExprs = typeDeclaration.getAnnotations().stream().filter(annotationExpr -> annotationExpr.getNameAsString().equals("Controller") ||
8889
annotationExpr.getNameAsString().equals("RestController")).collect(Collectors.toList());
@@ -98,7 +99,7 @@ protected void parseCompilationUnit(CompilationUnit compilationUnit,final Set<
9899
LogUtil.info("开始加载 controller 类 name %s ",className);
99100
cl = classLoader.loadClass(className);
100101
}catch (Exception e){
101-
LogUtil.warn(" className = %s 加载失败 err = %s ",className,e.getMessage());
102+
LogUtil.warn(" controller 类 className = %s 加载失败 err = %s ",className,e.getMessage());
102103
return;
103104
}
104105

@@ -116,7 +117,7 @@ protected void parseCompilationUnit(CompilationUnit compilationUnit,final Set<
116117
SpringUtil.map.containsKey(annotation.annotationType().getSimpleName())))
117118
.forEach(method -> {
118119
// LogUtil.info(" method signature is %s",methodSignature(method));
119-
// LogUtil.info(" methodDeclarations are %s",typeDeclaration.getMethods().get(0).getSignature().asString());
120+
LogUtil.info(" methodDeclarations are %s",typeDeclaration.getMethods().get(0).getSignature().asString());
120121
// LogUtil.info(" methodName is %s annotations len = %s ",method.getName(),method.getAnnotations()[0].annotationType().getSimpleName());
121122
List<MethodDeclaration> methodDeclarations = typeDeclaration.getMethodsBySignature(method.getName(),methodSignature(method));
122123
// typeDeclaration.getMethods().forEach(methodDeclaration -> {

‎src/main/java/com/hsjfans/github/util/ClassUtils.java‎

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public static ControllerMethod parseMethodComment(MethodDeclaration methodDeclar
171171
requestParam.setType(nativeParameter.getType().getTypeName());
172172
// 这里只解析 @param 参数
173173
// 判断请求参数是否为结构体,如果是 则进行解析
174-
if (!nativeParameter.getType().isPrimitive()){
174+
if (!nativeParameter.getType().isPrimitive()&&!nativeParameter.getType().getSimpleName().equals("String")){
175175
List<RequestParam> requestParams1 = parseRequestParam(nativeParameter.getType());
176176
// System.out.println(" requestParams1 is "+requestParams1);
177177
requestParam.setParams(requestParams1);
@@ -236,7 +236,7 @@ private static List<RequestParam> parseRequestParam(Class<?> request){
236236
if (typeDeclaration==null){
237237
return requestParams;
238238
}
239-
// System.out.println(typeDeclaration.getName());
239+
// System.out.println(typeDeclaration.getName()+typeDeclaration.getComment().toString());
240240
Arrays.stream(request.getDeclaredFields()).filter(field -> !field.isSynthetic()&&
241241
(field.getModifiers() & Modifier.FINAL) == 0
242242
&& (field.getModifiers() & Modifier.STATIC)==0
@@ -246,11 +246,10 @@ private static List<RequestParam> parseRequestParam(Class<?> request){
246246
&& (field.getModifiers() & Modifier.TRANSIENT)==0
247247
).
248248
forEach(field -> {
249-
250-
System.out.println(" filed = "+field.getType());
249+
// System.out.println(" filed = "+field.getType());
251250
RequestParam requestParam = new RequestParam();
252251
requestParam.setType(field.getType().getTypeName());
253-
if(field.getType().isPrimitive()){
252+
if(field.getType().isPrimitive()||field.getType().getSimpleName().equals("String")){
254253
typeDeclaration.getFieldByName(field.getName()).ifPresent(fieldDeclaration -> {
255254
parseFiledComment(((FieldDeclaration)fieldDeclaration).getComment().orElse(null),requestParam);
256255
if(requestParam.getName()==null){
@@ -293,9 +292,10 @@ else if(field.getType().isEnum()){
293292

294293

295294
// todo handle array
296-
private static void parseFiledComment(Comment comment,RequestParam requestParam){
297-
if(comment==null){return;}
295+
private static RequestParam parseFiledComment(Comment comment,RequestParam requestParam){
296+
if(comment==null){returnrequestParam;}
298297
Javadoc javadoc = comment.parse();
298+
// System.out.println(" javaDoc is "+javadoc);
299299
javadoc.getBlockTags().forEach(javadocBlockTag -> {
300300
// if contains `@ignore`
301301
if(javadocBlockTag.getType().equals(JavadocBlockTag.Type.IGNORE)){
@@ -311,11 +311,10 @@ private static void parseFiledComment(Comment comment,RequestParam requestParam)
311311
requestParam.setFuzzy(true);
312312
}
313313

314-
315314
});
316315

317316
requestParam.setDescription(javadoc.getDescription().toText());
318-
317+
returnrequestParam;
319318
}
320319

321320

@@ -385,7 +384,7 @@ public static ControllerClass parseClassComment(Comment comment, Class<?> cl){
385384
public static void main(String[] args) throws ParserException {
386385

387386
String testPath = "/Volumes/doc/projects/java/java-api-doc/src/main/java/com/hsjfans/github";
388-
String realPath = "/Volumes/doc/projects/java/api";
387+
String realPath = "/Volumes/doc/projects/java/java-api-doc/spring-api-demo";
389388
Config config = new Config();
390389
config.setPackageName(realPath);
391390
config.setDocName("xxx接口文档");

‎src/main/resources/tpl/api-url.html‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h3> <span class="label label-success">Response:</span> </h3>
4949
<tr align="center">
5050
<th>名称</th>
5151
<th>类型</th>
52+
<th>取值</th>
5253
<th>说明</th>
5354
</tr>
5455
${responses}

‎src/static/index.html‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<!DOCTYPE html>
2+
<html lang="zh-CN">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
8+
<title> ${api-url-name} </title>
9+
<link rel="import" href="js.html" >
10+
</head>
11+
<body>
12+
<nav class="navbar navbar-default">
13+
<div class="container">
14+
<div class="navbar-header">
15+
<a class="navbar-brand" href="./index.html">
16+
<img style="height: 100%" alt="${api-url-name}" src="https://raw.githubusercontent.com/hsjfans/git_resource/master/20190609204505.png">
17+
</a>
18+
<p class="navbar-text"> Generated via java-doc-api </p>
19+
</div>
20+
</div>
21+
</nav>
22+
<div class="container">
23+
<div class="alert alert-warning" role="alert">
24+
本文档按照`javaDoc`解析,并新增了一部分自定义注释,详见<a href="https://github.com/hsjfans/api-doc/wiki">wiki</a>
25+
</div>
26+
<div class="page-header">
27+
<h1> xxx接口文档 <small> xxx接口文档 </small></h1>
28+
</div>
29+
<div class="alert alert-info" role="alert">
30+
以下列表按照类名称进行分组展示
31+
</div>
32+
<div style="margin-top: 30px">
33+
<h3> 接口分组列表 <span class="label label-success">Done!</span></h3>
34+
<p> <span class="label label-warning">数量:</span> 1 </p>
35+
<ul style="margin-top: 20px; padding: 10px">
36+
37+
<li style="padding:5px" > <a href="./书籍相关接口.html" >书籍相关接口</a> <span> </span> </li>
38+
</ul>
39+
</div>
40+
</div>
41+
42+
43+
44+
</body>
45+
</html>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /