Skip to content

Commit 6eab0f2

Browse files
author
程序猿DD-翟永超
authored
Merge pull request #38 from JeffLi1993/master
支持全局响应消息
2 parents cd6d750 + bd9f68f commit 6eab0f2

File tree

3 files changed

+80
-15
lines changed

3 files changed

+80
-15
lines changed

pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.spring4all</groupId>
88
<artifactId>spring-boot-starter-swagger</artifactId>
9-
<version>1.5.1.RELEASE</version>
9+
<version>1.6.0-SNAPSHOT</version>
1010

1111
<name>spring-boot-starter-swagger</name>
1212
<url>https://github.com/SpringForAll/spring-boot-starter-swagger</url>
@@ -84,6 +84,11 @@
8484
<version>1.16.12</version>
8585
<scope>provided</scope>
8686
</dependency>
87+
<dependency>
88+
<groupId>org.springframework.boot</groupId>
89+
<artifactId>spring-boot-starter-web</artifactId>
90+
<optional>true</optional>
91+
</dependency>
8792
</dependencies>
8893

8994
<dependencyManagement>

src/main/java/com/spring4all/swagger/SwaggerAutoConfiguration.java

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
import org.springframework.context.annotation.Bean;
1313
import org.springframework.context.annotation.Configuration;
1414
import org.springframework.context.annotation.Import;
15-
import springfox.documentation.builders.ApiInfoBuilder;
16-
import springfox.documentation.builders.ParameterBuilder;
17-
import springfox.documentation.builders.PathSelectors;
18-
import springfox.documentation.builders.RequestHandlerSelectors;
15+
import org.springframework.util.StringUtils;
16+
import springfox.documentation.builders.*;
1917
import springfox.documentation.schema.ModelRef;
2018
import springfox.documentation.service.ApiInfo;
2119
import springfox.documentation.service.Contact;
2220
import springfox.documentation.service.Parameter;
21+
import springfox.documentation.service.ResponseMessage;
2322
import springfox.documentation.spi.DocumentationType;
23+
import org.springframework.web.bind.annotation.RequestMethod;
2424
import springfox.documentation.spring.web.plugins.Docket;
2525

2626
import java.util.*;
@@ -82,21 +82,25 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
8282
excludePath.add(PathSelectors.ant(path));
8383
}
8484

85-
Docket docket = new Docket(DocumentationType.SWAGGER_2)
85+
Docket docketForBuilder = new Docket(DocumentationType.SWAGGER_2)
8686
.host(swaggerProperties.getHost())
8787
.apiInfo(apiInfo)
8888
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(
89-
swaggerProperties.getGlobalOperationParameters()))
90-
.select()
89+
swaggerProperties.getGlobalOperationParameters()));
90+
91+
// 全局响应消息
92+
if (!swaggerProperties.getApplyDefaultResponseMessages()) {
93+
buildGlobalResponseMessage(swaggerProperties, docketForBuilder);
94+
}
95+
96+
Docket docket = docketForBuilder.select()
9197
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
9298
.paths(
9399
Predicates.and(
94100
Predicates.not(Predicates.or(excludePath)),
95101
Predicates.or(basePath)
96102
)
97-
)
98-
.build();
99-
103+
).build();
100104
configurableBeanFactory.registerSingleton("defaultDocket", docket);
101105
docketList.add(docket);
102106
return docketList;
@@ -138,12 +142,18 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
138142
excludePath.add(PathSelectors.ant(path));
139143
}
140144

141-
Docket docket = new Docket(DocumentationType.SWAGGER_2)
145+
Docket docketForBuilder = new Docket(DocumentationType.SWAGGER_2)
142146
.host(swaggerProperties.getHost())
143147
.apiInfo(apiInfo)
144-
.globalOperationParameters(assemblyGlobalOperationParameters(swaggerProperties.getGlobalOperationParameters(),
145-
docketInfo.getGlobalOperationParameters()))
146-
.groupName(groupName)
148+
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(
149+
swaggerProperties.getGlobalOperationParameters()));
150+
151+
// 全局响应消息
152+
if (!swaggerProperties.getApplyDefaultResponseMessages()) {
153+
buildGlobalResponseMessage(swaggerProperties, docketForBuilder);
154+
}
155+
156+
Docket docket = docketForBuilder.groupName(groupName)
147157
.select()
148158
.apis(RequestHandlerSelectors.basePackage(docketInfo.getBasePackage()))
149159
.paths(
@@ -160,11 +170,15 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
160170
return docketList;
161171
}
162172

173+
174+
163175
@Override
164176
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
165177
this.beanFactory = beanFactory;
166178
}
167179

180+
181+
168182
private List<Parameter> buildGlobalOperationParametersFromSwaggerProperties(
169183
List<SwaggerProperties.GlobalOperationParameter> globalOperationParameters) {
170184
List<Parameter> parameters = Lists.newArrayList();
@@ -216,4 +230,31 @@ private List<Parameter> assemblyGlobalOperationParameters(
216230
resultOperationParameters.addAll(docketOperationParameters);
217231
return buildGlobalOperationParametersFromSwaggerProperties(resultOperationParameters);
218232
}
233+
234+
/**
235+
* 设置全局响应消息
236+
*
237+
* @param swaggerProperties
238+
* @param docketForBuilder
239+
*/
240+
private void buildGlobalResponseMessage(SwaggerProperties swaggerProperties, Docket docketForBuilder) {
241+
List<ResponseMessage> responseMessages = new ArrayList();
242+
List<SwaggerProperties.GlobalResponseMessage> globalResponseMessages =
243+
swaggerProperties.getGlobalResponseMessages();
244+
for (SwaggerProperties.GlobalResponseMessage globalResponseMessage : globalResponseMessages) {
245+
ResponseMessageBuilder responseMessageBuilder = new ResponseMessageBuilder();
246+
responseMessageBuilder
247+
.code(globalResponseMessage.getCode())
248+
.message(globalResponseMessage.getMessage());
249+
250+
if (!StringUtils.isEmpty(globalResponseMessage.getModelRef())) {
251+
responseMessageBuilder
252+
.responseModel(new ModelRef(globalResponseMessage.getModelRef()));
253+
}
254+
responseMessages.add(responseMessageBuilder.build());
255+
}
256+
257+
docketForBuilder.useDefaultResponseMessages(swaggerProperties.getApplyDefaultResponseMessages())
258+
.globalResponseMessage(RequestMethod.GET,responseMessages);
259+
}
219260
}

src/main/java/com/spring4all/swagger/SwaggerProperties.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ public class SwaggerProperties {
5454
/**全局参数配置**/
5555
private List<GlobalOperationParameter> globalOperationParameters;
5656

57+
/** 是否使用默认预定义的响应消息 ,默认 true **/
58+
private Boolean applyDefaultResponseMessages = true;
59+
60+
/** 全局响应消息 ,目前支持 GET **/
61+
private List<GlobalResponseMessage> globalResponseMessages;
5762

5863
@Data
5964
@NoArgsConstructor
@@ -119,6 +124,20 @@ public static class Contact {
119124

120125
}
121126

127+
@Data
128+
@NoArgsConstructor
129+
public static class GlobalResponseMessage {
130+
131+
/** 响应码 **/
132+
private int code;
133+
134+
/** 响应消息 **/
135+
private String message;
136+
137+
/** 响应体 **/
138+
private String modelRef;
139+
}
140+
122141
}
123142

124143

0 commit comments

Comments
 (0)