Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
iBiz4j Spring R7
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
iBiz-R7后台标准模板
iBiz4j Spring R7
提交
d931cf1e
提交
d931cf1e
编写于
5月 09, 2020
作者:
chenxiang@lab.ibiz5.com
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Swagger domain Expand Bug -- IBZOperation 最后判断
上级
f9281784
变更
4
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
197 行增加
和
12 行删除
+197
-12
pom.xml.ftl
...%-provider/%PUBPRJ%-provider-%SYSAPI_PKGPATH%/pom.xml.ftl
+0
-10
SwaggerConfiguration.java.ftl
.../java/%SYS_PKGPATH%/swagger/SwaggerConfiguration.java.ftl
+36
-2
pom.xml.ftl
SLN/%PUBPRJ%-util/pom.xml.ftl
+10
-0
IBZOperationParameterReader.java.ftl
...YS_PKGPATH%/util/web/IBZOperationParameterReader.java.ftl
+151
-0
未找到文件。
SLN/%PUBPRJ%-provider/%PUBPRJ%-provider-%SYSAPI_PKGPATH%/pom.xml.ftl
浏览文件 @
d931cf1e
...
...
@@ -22,16 +22,6 @@ TARGET=PSSYSSERVICEAPI
<artifactId>${pub.getCodeName()?lower_case}-core</artifactId>
<version>${r'${project.version}'}</version>
</dependency>
<!-- Swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
<#if pub.getPSDeployCenter()?? && pub.getPSDeployCenter().getPSRegistryRepo()??>
...
...
SLN/%PUBPRJ%-provider/%PUBPRJ%-provider-%SYSAPI_PKGPATH%/src/main/java/%SYS_PKGPATH%/swagger/SwaggerConfiguration.java.ftl
浏览文件 @
d931cf1e
...
...
@@ -3,26 +3,35 @@ TARGET=PSDESERVICEAPI
</#
ibiztemplate
>
package
${
pub
.
getPKGCodeName
()
!''}.swagger;
import
${
pub
.
getPKGCodeName
()
!''}.security.SpringContextHolder;
import
org
.
springframework
.
context
.
annotation
.
Bean
;
import
org
.
springframework
.
context
.
annotation
.
Configuration
;
import
static
com
.
google
.
common
.
base
.
Predicates
.
or
;
import
static
springfox
.
documentation
.
builders
.
PathSelectors
.
regex
;
import
org
.
springframework
.
plugin
.
core
.
PluginRegistry
;
import
org
.
springframework
.
plugin
.
core
.
PluginRegistrySupport
;
import
springfox
.
documentation
.
builders
.
ApiInfoBuilder
;
import
springfox
.
documentation
.
builders
.
PathSelectors
;
import
springfox
.
documentation
.
builders
.
RequestHandlerSelectors
;
import
springfox
.
documentation
.
spi
.
DocumentationType
;
import
springfox
.
documentation
.
spi
.
service
.
OperationBuilderPlugin
;
import
springfox
.
documentation
.
spring
.
web
.
plugins
.
Docket
;
import
springfox
.
documentation
.
spring
.
web
.
readers
.
operation
.
OperationParameterReader
;
import
springfox
.
documentation
.
swagger2
.
annotations
.
EnableSwagger2
;
import
java
.
lang
.
reflect
.
Field
;
import
java
.
util
.
ArrayList
;
import
java
.
util
.
List
;
@
Configuration
//
@
EnableSwagger2
@
EnableSwagger2
public
class
SwaggerConfiguration
{
@
Bean
public
Docket
docket
()
{
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
Docket
docket
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
groupName
(
"DEFAULT"
)
.
pathMapping
(
"/"
)
.
apiInfo
(
...
...
@@ -36,6 +45,8 @@ public class SwaggerConfiguration {
.
paths
(
PathSelectors
.
any
())
.
build
()
;
removeDefaultPlugin
();
return
docket
;
}
<#
if
sys
.
getAllPSSysServiceAPIs
()??>
...
...
@@ -61,4 +72,27 @@ public class SwaggerConfiguration {
</#
list
>
</#
if
>
private
void
removeDefaultPlugin
()
{
//
从
spring
容器中获取
swagger
插件注册表
PluginRegistry
<
OperationBuilderPlugin
,
DocumentationType
>
pluginRegistry
=
SpringContextHolder
.
getBean
(
"operationBuilderPluginRegistry"
);
//
插件集合
List
<
OperationBuilderPlugin
>
plugins
=
pluginRegistry
.
getPlugins
();
//
从
spring
容器中获取需要删除的插件
OperationParameterReader
operationParameterReader
=
SpringContextHolder
.
getBean
(
OperationParameterReader
.
class
);
if
(
operationParameterReader
==
null
)
return
;
//
原
plugins
集合不能修改,创建新集合,通过反射替换
if
(
pluginRegistry
.
contains
(
operationParameterReader
))
{
List
<
OperationBuilderPlugin
>
plugins_new
=
new
ArrayList
<
OperationBuilderPlugin
>(
plugins
);
plugins_new
.
remove
(
operationParameterReader
);
try
{
Field
field
=
PluginRegistrySupport
.
class
.
getDeclaredField
(
"plugins"
);
field
.
setAccessible
(
true
);
field
.
set
(
pluginRegistry
,
plugins_new
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
}
SLN/%PUBPRJ%-util/pom.xml.ftl
浏览文件 @
d931cf1e
...
...
@@ -78,5 +78,15 @@ TARGET=PSSYSTEM
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- Swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
</project>
SLN/%PUBPRJ%-util/src/main/java/%SYS_PKGPATH%/util/web/IBZOperationParameterReader.java.ftl
0 → 100644
浏览文件 @
d931cf1e
<#
ibiztemplate
>
TARGET
=
PSSYSTEM
</#
ibiztemplate
>
package
${
pub
.
getPKGCodeName
()}.
util
.
web
;
import
cn
.
ibizlab
.
ftc
.
util
.
filter
.
SearchContextBase
;
import
com
.
fasterxml
.
classmate
.
ResolvedType
;
import
com
.
google
.
common
.
base
.
Predicate
;
import
com
.
google
.
common
.
collect
.
FluentIterable
;
import
org
.
springframework
.
beans
.
factory
.
annotation
.
Autowired
;
import
org
.
springframework
.
context
.
annotation
.
Primary
;
import
org
.
springframework
.
core
.
Ordered
;
import
org
.
springframework
.
core
.
annotation
.
Order
;
import
org
.
springframework
.
stereotype
.
Component
;
import
org
.
springframework
.
web
.
bind
.
annotation
.
PathVariable
;
import
org
.
springframework
.
web
.
bind
.
annotation
.
RequestBody
;
import
org
.
springframework
.
web
.
bind
.
annotation
.
RequestParam
;
import
org
.
springframework
.
web
.
bind
.
annotation
.
RequestPart
;
import
springfox
.
documentation
.
builders
.
ParameterBuilder
;
import
springfox
.
documentation
.
service
.
Parameter
;
import
springfox
.
documentation
.
service
.
ResolvedMethodParameter
;
import
springfox
.
documentation
.
spi
.
DocumentationType
;
import
springfox
.
documentation
.
spi
.
schema
.
EnumTypeDeterminer
;
import
springfox
.
documentation
.
spi
.
service
.
OperationBuilderPlugin
;
import
springfox
.
documentation
.
spi
.
service
.
contexts
.
OperationContext
;
import
springfox
.
documentation
.
spi
.
service
.
contexts
.
ParameterContext
;
import
springfox
.
documentation
.
spring
.
web
.
plugins
.
DocumentationPluginsManager
;
import
springfox
.
documentation
.
spring
.
web
.
readers
.
parameter
.
ExpansionContext
;
import
springfox
.
documentation
.
spring
.
web
.
readers
.
parameter
.
ModelAttributeParameterExpander
;
import
java
.
lang
.
annotation
.
Annotation
;
import
java
.
util
.
List
;
import
java
.
util
.
Map
;
import
java
.
util
.
Set
;
import
static
com
.
google
.
common
.
base
.
Predicates
.*;
import
static
com
.
google
.
common
.
collect
.
Lists
.*;
import
static
springfox
.
documentation
.
schema
.
Collections
.*;
import
static
springfox
.
documentation
.
schema
.
Maps
.*;
import
static
springfox
.
documentation
.
schema
.
Types
.*;
@
Component
@
Order
(
Ordered
.
HIGHEST_PRECEDENCE
)
public
class
IBZOperationParameterReader
implements
OperationBuilderPlugin
{
private
final
ModelAttributeParameterExpander
expander
;
private
final
EnumTypeDeterminer
enumTypeDeterminer
;
@
Autowired
private
DocumentationPluginsManager
pluginsManager
;
@
Autowired
public
UsrOperationParameterReader
(
ModelAttributeParameterExpander
expander
,
EnumTypeDeterminer
enumTypeDeterminer
)
{
this
.
expander
=
expander
;
this
.
enumTypeDeterminer
=
enumTypeDeterminer
;
}
@
Override
public
void
apply
(
OperationContext
context
)
{
context
.
operationBuilder
().
parameters
(
context
.
getGlobalOperationParameters
());
context
.
operationBuilder
().
parameters
(
readParameters
(
context
));
}
@
Override
public
boolean
supports
(
DocumentationType
delimiter
)
{
return
true
;
}
private
List
<
Parameter
>
readParameters
(
final
OperationContext
context
)
{
List
<
ResolvedMethodParameter
>
methodParameters
=
context
.
getParameters
();
List
<
Parameter
>
parameters
=
newArrayList
();
for
(
ResolvedMethodParameter
methodParameter
:
methodParameters
)
{
ResolvedType
alternate
=
context
.
alternateFor
(
methodParameter
.
getParameterType
());
if
(
!shouldIgnore(methodParameter, alternate, context.getIgnorableParameterTypes())) {
ParameterContext
parameterContext
=
new
ParameterContext
(
methodParameter
,
new
ParameterBuilder
(),
context
.
getDocumentationContext
(),
context
.
getGenericsNamingStrategy
(),
context
);
if
(
shouldExpand
(
methodParameter
,
alternate
))
{
parameters
.
addAll
(
expander
.
expand
(
new
ExpansionContext
(
""
,
alternate
,
context
)));
}
else
{
parameters
.
add
(
pluginsManager
.
parameter
(
parameterContext
));
}
}
}
return
FluentIterable
.
from
(
parameters
).
filter
(
not
(
hiddenParams
())).
toList
();
}
private
Predicate
<
Parameter
>
hiddenParams
()
{
return
new
Predicate
<
Parameter
>()
{
@
Override
public
boolean
apply
(
Parameter
input
)
{
return
input
.
isHidden
();
}
};
}
private
boolean
shouldIgnore
(
final
ResolvedMethodParameter
parameter
,
ResolvedType
resolvedParameterType
,
final
Set
<
Class
>
ignorableParamTypes
)
{
if
(
ignorableParamTypes
.
contains
(
resolvedParameterType
.
getErasedType
()))
{
return
true
;
}
return
FluentIterable
.
from
(
ignorableParamTypes
)
.
filter
(
isAnnotation
())
.
filter
(
parameterIsAnnotatedWithIt
(
parameter
)).
size
()
>
0
;
}
private
Predicate
<
Class
>
parameterIsAnnotatedWithIt
(
final
ResolvedMethodParameter
parameter
)
{
return
new
Predicate
<
Class
>()
{
@
Override
public
boolean
apply
(
Class
input
)
{
return
parameter
.
hasParameterAnnotation
(
input
);
}
};
}
private
Predicate
<
Class
>
isAnnotation
()
{
return
new
Predicate
<
Class
>()
{
@
Override
public
boolean
apply
(
Class
input
)
{
return
Annotation
.
class
.
isAssignableFrom
(
input
);
}
};
}
private
boolean
shouldExpand
(
final
ResolvedMethodParameter
parameter
,
ResolvedType
resolvedParamType
)
{
return
!parameter.hasParameterAnnotation(RequestBody.class)
&&
!parameter.hasParameterAnnotation(RequestPart.class)
&&
!parameter.hasParameterAnnotation(RequestParam.class)
&&
!parameter.hasParameterAnnotation(PathVariable.class)
&&
!isBaseType(typeNameFor(resolvedParamType.getErasedType()))
&&
!enumTypeDeterminer.isEnum(resolvedParamType.getErasedType())
&&
!isContainerType(resolvedParamType)
&&
!isMapType(resolvedParamType)
&&
!SearchContextBase.class.isAssignableFrom(resolvedParamType.getErasedType());
}
}
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录