如何在 springfox 中用 String 替换 joda.DateTime?
How to replace joda.DateTime with String in springfox?
我正在尝试使用 springfox(版本 2.0.2)记录我的 spring(版本 3.2.6)应用程序。
我的模型 class 有一个 org.joda.time.DateTime 字段。
当它在响应模型架构中呈现时,它看起来像这样:
"dataAsOf": {
"afterNow": true,
"beforeNow": true,
"centuryOfEra": 0,
"chronology": {
"zone": {
"fixed": true
}
},
"dayOfMonth": 0,
"dayOfWeek": 0,
"dayOfYear": 0,
"equalNow": true,
"era": 0,
"hourOfDay": 0,
"millis": 0,
"millisOfDay": 0,
"millisOfSecond": 0,
"minuteOfDay": 0,
"minuteOfHour": 0,
"monthOfYear": 0,
"secondOfDay": 0,
"secondOfMinute": 0,
"weekOfWeekyear": 0,
"weekyear": 0,
"year": 0,
"yearOfCentury": 0,
"yearOfEra": 0,
"zone": {
"fixed": true
}
}
我真的很想摆脱我的领域中那些无用的细节。
到目前为止,我已经在我的 swagger 配置中尝试过这个 class:
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket restfulApi() {
String deploymentEnvironment = EnvironmentUtils.getDeployedEnvironment();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.enable(isSwaggerEnabled(deploymentEnvironment))
.apiInfo(getApiInfo())
.directModelSubstitute(DateTime.class, String.class);
docket = new ApiSelectorBuilder(docket)
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.build();
return docket;
}
public ApiInfo getApiInfo() {
ApiInfo apiInfo = new ApiInfo("API", "RESTful description", "1.0", "terms of service", "email@email.com", "Licence Type", "License URL");
return apiInfo;
}
public boolean isSwaggerEnabled(String deploymentEnvironment) {
return deploymentEnvironment.equalsIgnoreCase("local") ? true : false;
}
}
所以我使用 Docket 的 directModelSubstitute 方法将 DateTime class 替换为 String class,但没有成功。 dateAsOf 字段仍在显示所有额外信息。
我也尝试在我的 getter 上使用 @ApiOperation(dateType="java.lang.String") 作为 dataAsOf 字段,但它仍然没有用。
你能帮我弄清楚我错过了什么吗?
我已经设法让它工作了。
看来我首先必须应用 Docket.ignoredParameterTypes(DateTime.class)
,这样 swagger 框架就不会为此 class 生成任何文档,然后应用 Docket.directModelSubstitute(DateTime.class, String.class)
,这实际上会取代 class。
现在我的模型架构是:
"dataAsOf": "string"
我正在尝试使用 springfox(版本 2.0.2)记录我的 spring(版本 3.2.6)应用程序。
我的模型 class 有一个 org.joda.time.DateTime 字段。
当它在响应模型架构中呈现时,它看起来像这样:
"dataAsOf": {
"afterNow": true,
"beforeNow": true,
"centuryOfEra": 0,
"chronology": {
"zone": {
"fixed": true
}
},
"dayOfMonth": 0,
"dayOfWeek": 0,
"dayOfYear": 0,
"equalNow": true,
"era": 0,
"hourOfDay": 0,
"millis": 0,
"millisOfDay": 0,
"millisOfSecond": 0,
"minuteOfDay": 0,
"minuteOfHour": 0,
"monthOfYear": 0,
"secondOfDay": 0,
"secondOfMinute": 0,
"weekOfWeekyear": 0,
"weekyear": 0,
"year": 0,
"yearOfCentury": 0,
"yearOfEra": 0,
"zone": {
"fixed": true
}
}
我真的很想摆脱我的领域中那些无用的细节。
到目前为止,我已经在我的 swagger 配置中尝试过这个 class:
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket restfulApi() {
String deploymentEnvironment = EnvironmentUtils.getDeployedEnvironment();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.enable(isSwaggerEnabled(deploymentEnvironment))
.apiInfo(getApiInfo())
.directModelSubstitute(DateTime.class, String.class);
docket = new ApiSelectorBuilder(docket)
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.build();
return docket;
}
public ApiInfo getApiInfo() {
ApiInfo apiInfo = new ApiInfo("API", "RESTful description", "1.0", "terms of service", "email@email.com", "Licence Type", "License URL");
return apiInfo;
}
public boolean isSwaggerEnabled(String deploymentEnvironment) {
return deploymentEnvironment.equalsIgnoreCase("local") ? true : false;
}
}
所以我使用 Docket 的 directModelSubstitute 方法将 DateTime class 替换为 String class,但没有成功。 dateAsOf 字段仍在显示所有额外信息。
我也尝试在我的 getter 上使用 @ApiOperation(dateType="java.lang.String") 作为 dataAsOf 字段,但它仍然没有用。
你能帮我弄清楚我错过了什么吗?
我已经设法让它工作了。
看来我首先必须应用 Docket.ignoredParameterTypes(DateTime.class)
,这样 swagger 框架就不会为此 class 生成任何文档,然后应用 Docket.directModelSubstitute(DateTime.class, String.class)
,这实际上会取代 class。
现在我的模型架构是:
"dataAsOf": "string"