一个日牯子
Home
Tags
GitHub
Author
2019-09-04
SVG
HTML
PDF
C
o
n
t
r
o
l
l
e
r
T
e
s
t
1
使
用
T
D
D
开
发
S
p
r
i
n
g
B
o
o
t
应
用
开
发
实
践
闲
话
编
程
C
o
n
t
e
n
t
s
创
建
I
n
t
e
g
r
a
t
i
o
n
T
e
s
t
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
C
o
n
t
r
o
l
l
e
r
T
e
s
t
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
S
e
r
v
i
c
e
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
R
e
p
o
s
i
t
o
r
y
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
虽
然
觉
得
没
什
么
卵
用
,
但
实
际
工
作
中
还
是
必
须
要
使
用
,
这
不
最
近
就
做
了
一
个
使
用
的
方
式
开
发
的
例
子
。
下
面
阐
述
一
下
如
何
开
发
一
个
的
请
求
,
从
数
据
库
中
读
取
数
据
并
返
回
。
创
建
I
n
t
e
g
r
a
t
i
o
n
T
e
s
t
第
一
步
可
以
从
开
始
,
即
模
拟
真
实
发
送
一
个
请
求
,
然
后
检
验
返
回
的
。
简
单
起
见
,
第
一
步
只
校
验
状
态
值
:
@
R
u
n
W
i
t
h
(
S
p
r
i
n
g
R
u
n
n
e
r
.
c
l
a
s
s
)
@
S
p
r
i
n
g
B
o
o
t
T
e
s
t
(
w
e
b
E
n
v
i
r
o
n
m
e
n
t
=
W
e
b
E
n
v
i
r
o
n
m
e
n
t
.
R
A
N
D
O
M
_
P
O
R
T
)
p
u
b
l
i
c
c
l
a
s
s
I
n
t
e
g
r
a
t
i
o
n
T
e
s
t
{
@
A
u
t
o
w
i
r
e
d
p
r
i
v
a
t
e
T
e
s
t
R
e
s
t
T
e
m
p
l
a
t
e
t
e
s
t
C
l
i
e
n
t
;
@
T
e
s
t
p
u
b
l
i
c
v
o
i
d
s
h
o
u
l
d
_
g
e
t
_
c
o
m
p
u
t
e
r
_
l
i
s
t
_
w
h
e
n
_
c
a
l
l
_
l
i
s
t
_
c
o
m
p
u
t
e
r
_
a
p
i
(
)
{
R
e
s
p
o
n
s
e
E
n
t
i
t
y
<
L
i
s
t
<
C
o
m
p
u
t
e
r
D
t
o
>
>
r
e
s
p
o
n
s
e
=
t
e
s
t
C
l
i
e
n
t
.
e
x
c
h
a
n
g
e
(
"
/
c
o
m
p
u
t
e
r
s
"
,
H
t
t
p
M
e
t
h
o
d
.
G
E
T
,
n
u
l
l
,
n
e
w
P
a
r
a
m
e
t
e
r
i
z
e
d
T
y
p
e
R
e
f
e
r
e
n
c
e
<
L
i
s
t
<
C
o
m
p
u
t
e
r
D
t
o
>
>
(
)
{
}
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
H
t
t
p
S
t
a
t
u
s
.
O
K
,
r
e
s
p
o
n
s
e
.
g
e
t
S
t
a
t
u
s
C
o
d
e
(
)
)
;
}
}
这
里
特
意
使
用
以
使
得
启
动
一
个
接
近
真
实
的
,
来
测
试
我
们
的
请
求
。
当
然
这
个
测
试
会
挂
了
,
因
为
都
还
没
写
呢
。
所
以
下
一
个
先
来
创
建
,
但
是
呢
,
通
常
从
测
试
开
始
写
起
,
所
以
来
测
试
吧
。
C
o
n
t
r
o
l
l
e
r
T
e
s
t
测
试
就
是
单
元
测
试
了
,
不
需
要
测
试
其
他
的
组
件
(
比
如
什
么
的
。
@
R
u
n
W
i
t
h
(
S
p
r
i
n
g
R
u
n
n
e
r
.
c
l
a
s
s
)
@
W
e
b
M
v
c
T
e
s
t
(
c
o
n
t
r
o
l
l
e
r
s
=
C
o
m
p
u
t
e
r
C
o
n
t
r
o
l
l
e
r
.
c
l
a
s
s
)
p
u
b
l
i
c
c
l
a
s
s
C
o
m
p
u
t
e
r
C
o
n
t
r
o
l
l
e
r
T
e
s
t
{
@
A
u
t
o
w
i
r
e
d
C
o
n
t
r
o
l
l
e
r
T
e
s
t
2
p
r
i
v
a
t
e
M
o
c
k
M
v
c
m
o
c
k
M
v
c
;
@
T
e
s
t
p
u
b
l
i
c
v
o
i
d
s
h
o
u
l
d
_
g
e
t
_
a
_
l
i
s
t
_
w
h
e
n
_
g
e
t
_
c
o
m
p
u
t
e
r
s
(
)
t
h
r
o
w
s
E
x
c
e
p
t
i
o
n
{
m
o
c
k
M
v
c
.
p
e
r
f
o
r
m
(
M
o
c
k
M
v
c
R
e
q
u
e
s
t
B
u
i
l
d
e
r
s
.
g
e
t
(
"
/
c
o
m
p
u
t
e
r
s
"
)
)
.
a
n
d
E
x
p
e
c
t
(
s
t
a
t
u
s
(
)
.
i
s
O
k
(
)
)
;
}
}
然
后
就
是
需
要
创
建
一
个
,
让
测
试
可
以
过
:
@
R
e
s
t
C
o
n
t
r
o
l
l
e
r
(
"
/
c
o
m
p
u
t
e
r
s
"
)
p
u
b
l
i
c
c
l
a
s
s
C
o
m
p
u
t
e
r
C
o
n
t
r
o
l
l
e
r
{
@
G
e
t
M
a
p
p
i
n
g
p
u
b
l
i
c
L
i
s
t
<
C
o
m
p
u
t
e
r
D
t
o
>
g
e
t
C
o
m
p
u
t
e
r
s
(
)
{
r
e
t
u
r
n
n
u
l
l
;
}
}
到
这
里
基
本
上
集
成
测
试
也
可
以
过
了
。
所
以
你
可
以
先
一
次
了
。
然
后
,
当
然
我
们
不
能
把
逻
辑
放
到
里
面
啊
,
我
们
需
要
一
个
来
处
理
业
务
逻
辑
。
这
个
又
会
从
数
据
库
中
读
取
数
据
。
在
用
到
之
前
,
我
们
可
能
需
要
先
改
一
下
我
们
的
测
试
,
因
为
到
目
前
为
止
并
没
有
校
验
实
际
的
字
段
,
只
是
校
验
了
返
回
状
态
码
,
现
在
可
以
开
始
校
验
了
:
@
M
o
c
k
B
e
a
n
p
r
i
v
a
t
e
C
o
m
p
u
t
e
r
S
e
r
v
i
c
e
c
o
m
p
u
t
e
r
S
e
r
v
i
c
e
;
@
T
e
s
t
p
u
b
l
i
c
v
o
i
d
s
h
o
u
l
d
_
g
e
t
_
a
_
l
i
s
t
_
w
h
e
n
_
g
e
t
_
c
o
m
p
u
t
e
r
s
(
)
t
h
r
o
w
s
E
x
c
e
p
t
i
o
n
{
g
i
v
e
n
(
c
o
m
p
u
t
e
r
S
e
r
v
i
c
e
.
g
e
t
C
o
m
p
u
t
e
r
s
(
)
)
.
w
i
l
l
R
e
t
u
r
n
(
C
o
l
l
e
c
t
i
o
n
s
.
s
i
n
g
l
e
t
o
n
L
i
s
t
(
n
e
w
C
o
m
p
u
t
e
r
D
t
o
(
1
,
"
M
a
c
B
o
o
k
2
0
1
5
"
,
"
H
a
i
f
e
n
g
L
i
"
,
"
2
0
1
9
-
0
9
-
1
0
"
)
)
)
;
m
o
c
k
M
v
c
.
p
e
r
f
o
r
m
(
M
o
c
k
M
v
c
R
e
q
u
e
s
t
B
u
i
l
d
e
r
s
.
g
e
t
(
"
/
c
o
m
p
u
t
e
r
s
"
)
)
.
a
n
d
E
x
p
e
c
t
(
s
t
a
t
u
s
(
)
.
i
s
O
k
(
)
)
.
a
n
d
E
x
p
e
c
t
(
j
s
o
n
P
a
t
h
(
"
$
"
,
h
a
s
S
i
z
e
(
1
)
)
)
.
a
n
d
E
x
p
e
c
t
(
j
s
o
n
P
a
t
h
(
"
$
[
0
]
.
i
d
"
)
.
v
a
l
u
e
(
1
)
)
.
a
n
d
E
x
p
e
c
t
(
j
s
o
n
P
a
t
h
(
"
$
[
0
]
.
t
y
p
e
"
)
.
v
a
l
u
e
(
"
M
a
c
B
o
o
k
2
0
1
5
"
)
)
.
a
n
d
E
x
p
e
c
t
(
j
s
o
n
P
a
t
h
(
"
$
[
0
]
.
o
w
n
e
r
"
)
.
v
a
l
u
e
(
"
H
a
i
f
e
n
g
L
i
"
)
)
.
a
n
d
E
x
p
e
c
t
(
j
s
o
n
P
a
t
h
(
"
$
[
0
]
.
c
r
e
a
t
e
T
i
m
e
"
)
.
v
a
l
u
e
(
"
2
0
1
9
-
0
9
-
1
0
"
)
)
.
a
n
d
D
o
(
p
r
i
n
t
(
)
)
;
}
这
里
我
们
把
给
掉
,
因
此
可
以
控
制
它
的
行
为
,
实
际
的
就
一
个
空
函
数
就
可
以
了
。
R
e
p
o
s
i
t
o
r
y
3
S
e
r
v
i
c
e
这
时
候
,
可
以
考
虑
实
现
了
,
因
为
需
要
读
取
数
据
库
,
所
以
需
要
引
入
一
个
来
查
询
数
据
库
,
我
们
可
以
掉
,
来
测
的
逻
辑
:
@
R
u
n
W
i
t
h
(
M
o
c
k
i
t
o
J
U
n
i
t
R
u
n
n
e
r
.
c
l
a
s
s
)
p
u
b
l
i
c
c
l
a
s
s
C
o
m
p
u
t
e
r
S
e
r
v
i
c
e
T
e
s
t
{
@
M
o
c
k
p
r
i
v
a
t
e
C
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
c
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
;
@
I
n
j
e
c
t
M
o
c
k
s
p
r
i
v
a
t
e
C
o
m
p
u
t
e
r
S
e
r
v
i
c
e
c
o
m
p
u
t
e
r
S
e
r
v
i
c
e
;
@
T
e
s
t
p
u
b
l
i
c
v
o
i
d
s
h
o
u
l
d
_
r
e
t
u
r
n
_
c
o
m
p
u
t
e
r
_
l
i
s
t
_
w
h
e
n
_
g
e
t
_
a
l
l
_
c
o
m
p
u
t
e
r
s
(
)
t
h
r
o
w
s
P
a
r
s
e
E
x
c
e
p
t
i
o
n
{
C
o
m
p
u
t
e
r
E
n
t
i
t
y
s
t
o
r
e
d
=
n
e
w
C
o
m
p
u
t
e
r
E
n
t
i
t
y
(
1
,
"
M
a
c
B
o
o
k
2
0
1
5
"
,
"
H
a
i
f
e
n
g
L
i
"
,
n
e
w
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
(
"
d
d
/
M
M
/
y
y
y
y
"
)
.
p
a
r
s
e
(
"
0
1
/
0
9
/
2
0
1
9
"
)
)
;
g
i
v
e
n
(
c
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
.
f
i
n
d
A
l
l
(
)
)
.
w
i
l
l
R
e
t
u
r
n
(
C
o
l
l
e
c
t
i
o
n
s
.
s
i
n
g
l
e
t
o
n
L
i
s
t
(
s
t
o
r
e
d
)
)
;
L
i
s
t
<
C
o
m
p
u
t
e
r
D
t
o
>
c
o
m
p
u
t
e
r
s
=
c
o
m
p
u
t
e
r
S
e
r
v
i
c
e
.
g
e
t
C
o
m
p
u
t
e
r
s
(
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
1
,
c
o
m
p
u
t
e
r
s
.
s
i
z
e
(
)
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
1
,
c
o
m
p
u
t
e
r
s
.
g
e
t
(
0
)
.
g
e
t
I
d
(
)
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
"
M
a
c
B
o
o
k
2
0
1
5
"
,
c
o
m
p
u
t
e
r
s
.
g
e
t
(
0
)
.
g
e
t
T
y
p
e
(
)
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
"
H
a
i
f
e
n
g
L
i
"
,
c
o
m
p
u
t
e
r
s
.
g
e
t
(
0
)
.
g
e
t
O
w
n
e
r
(
)
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
"
2
0
1
9
-
0
9
-
0
1
"
,
c
o
m
p
u
t
e
r
s
.
g
e
t
(
0
)
.
g
e
t
C
r
e
a
t
e
T
i
m
e
(
)
)
;
}
}
同
样
里
面
也
就
一
个
空
函
数
就
行
了
,
但
是
这
时
候
得
把
的
逻
辑
写
完
,
让
测
试
可
以
通
过
,
这
样
的
任
务
就
完
成
了
,
其
他
测
试
也
全
部
都
可
以
通
过
。
R
e
p
o
s
i
t
o
r
y
最
后
一
步
就
是
来
实
现
了
,
这
里
需
要
使
用
,
用
内
存
数
据
库
进
行
测
试
:
@
R
u
n
W
i
t
h
(
S
p
r
i
n
g
R
u
n
n
e
r
.
c
l
a
s
s
)
@
D
a
t
a
J
p
a
T
e
s
t
p
u
b
l
i
c
c
l
a
s
s
C
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
T
e
s
t
{
@
A
u
t
o
w
i
r
e
d
p
r
i
v
a
t
e
T
e
s
t
E
n
t
i
t
y
M
a
n
a
g
e
r
e
n
t
i
t
y
M
a
n
a
g
e
r
;
@
A
u
t
o
w
i
r
e
d
p
r
i
v
a
t
e
C
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
c
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
;
R
e
p
o
s
i
t
o
r
y
4
@
B
e
f
o
r
e
p
u
b
l
i
c
v
o
i
d
p
r
e
p
a
r
e
D
a
t
a
(
)
t
h
r
o
w
s
P
a
r
s
e
E
x
c
e
p
t
i
o
n
{
e
n
t
i
t
y
M
a
n
a
g
e
r
.
p
e
r
s
i
s
t
A
n
d
F
l
u
s
h
(
n
e
w
C
o
m
p
u
t
e
r
E
n
t
i
t
y
(
1
,
"
M
a
c
B
o
o
k
2
0
1
5
"
,
"
H
a
i
f
e
n
g
L
i
"
,
n
e
w
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
(
"
d
d
/
M
M
/
y
y
y
y
"
)
.
p
a
r
s
e
(
"
0
1
/
0
9
/
2
0
1
9
"
)
)
)
;
e
n
t
i
t
y
M
a
n
a
g
e
r
.
p
e
r
s
i
s
t
A
n
d
F
l
u
s
h
(
n
e
w
C
o
m
p
u
t
e
r
E
n
t
i
t
y
(
2
,
"
D
e
s
k
t
o
p
"
,
n
u
l
l
,
n
e
w
S
i
m
p
l
e
D
a
t
e
F
o
r
m
a
t
(
"
d
d
/
M
M
/
y
y
y
y
"
)
.
p
a
r
s
e
(
"
0
2
/
0
9
/
2
0
1
9
"
)
)
)
;
}
@
T
e
s
t
p
u
b
l
i
c
v
o
i
d
s
h
o
u
l
d
_
r
e
t
u
r
n
_
a
l
l
_
r
e
c
o
r
d
s
_
i
n
_
d
b
_
w
h
e
n
_
f
i
n
d
_
a
l
l
(
)
{
L
i
s
t
<
C
o
m
p
u
t
e
r
E
n
t
i
t
y
>
e
n
t
i
t
i
e
s
=
c
o
m
p
u
t
e
r
R
e
p
o
s
i
t
o
r
y
.
f
i
n
d
A
l
l
(
)
;
a
s
s
e
r
t
E
q
u
a
l
s
(
2
,
e
n
t
i
t
i
e
s
.
s
i
z
e
(
)
)
;
}
}
因
为
你
只
需
要
写
一
堆
,
测
试
这
里
的
逻
辑
还
是
十
分
有
必
要
的
。
所
以
到
这
一
步
为
止
,
基
本
上
程
序
的
功
能
就
已
经
实
现
了
,
唯
一
需
要
做
的
就
是
改
一
下
配
置
来
连
接
到
真
是
的
数
据
库
。
整
个
代
码
可
以
在
我
的
上
面
找
到
。
HTML view coming soon.
Download PDF
for the full formatted version.