Springfox:未应用替代类型规则
Springfox: Alternate type rules are not being applied
我的@EnableSwagger2
注解class包含以下方法:
@Bean
public Docket myServiceApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("My Service API").apiInfo(apiInfo()).select()
.paths(PathSelectors.regex("/api.*")).build()
.alternateTypeRules(
newRule(
typeResolver.resolve(Map.class, String.class, Object.class),
typeResolver.resolve(InputExample.class)
)
)
;
}
其中 InputExample
是一个 class,其中包含许多用 @ApiModelProperty
注释的不同属性。
我的 REST 控制器中的方法如下所示:
@ApiOperation(
value = "Do stuff",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE,
response = SomeOutput.class
)
@RequestMapping(
value = "/api/v1/stuff",
method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_JSON_VALUE},
produces = {MediaType.APPLICATION_JSON_VALUE}
)
@ApiResponses(
value = {
@ApiResponse(code = 200, message = "Service execution successful"),
@ApiResponse(code = 400, message = "Bad input data"),
@ApiResponse(code = 500, message = "An internal server error occurred"),
@ApiResponse(code = 503, message = "The service is currently unavailable")
}
)
public ResponseEntity<SomeOutput> doServiceStuff(
HttpServletRequest request,
@RequestBody Map<String, Object> inputContent
) throws
ValidationException,
ServiceUnavailableException,
IOException,
WorkflowDocumentProcessingException
{
...
}
遗憾的是,当我 运行 我的服务并在 Swagger UI 上打开我的端点时,我看到的是:
这可能是什么原因造成的?我该如何调试?
P.S.: @EnableSwagger2
- class 的其余部分有效。
似乎已经有一个内部规则,原始类型 Map<String, Object>
覆盖了开发人员添加到 .alternateTypeRules()
的任何内容。
我能找到解决这个问题的唯一方法是创建一个 class MyInputMap extends Map<String, Object>
并在所有有问题的端点中使用它,同时还将类型规则调整为:
newRule(
typeResolver.resolve(MyInputMap.class),
typeResolver.resolve(InputExample.class)
)
我的@EnableSwagger2
注解class包含以下方法:
@Bean
public Docket myServiceApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("My Service API").apiInfo(apiInfo()).select()
.paths(PathSelectors.regex("/api.*")).build()
.alternateTypeRules(
newRule(
typeResolver.resolve(Map.class, String.class, Object.class),
typeResolver.resolve(InputExample.class)
)
)
;
}
其中 InputExample
是一个 class,其中包含许多用 @ApiModelProperty
注释的不同属性。
我的 REST 控制器中的方法如下所示:
@ApiOperation(
value = "Do stuff",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE,
response = SomeOutput.class
)
@RequestMapping(
value = "/api/v1/stuff",
method = RequestMethod.POST,
consumes = {MediaType.APPLICATION_JSON_VALUE},
produces = {MediaType.APPLICATION_JSON_VALUE}
)
@ApiResponses(
value = {
@ApiResponse(code = 200, message = "Service execution successful"),
@ApiResponse(code = 400, message = "Bad input data"),
@ApiResponse(code = 500, message = "An internal server error occurred"),
@ApiResponse(code = 503, message = "The service is currently unavailable")
}
)
public ResponseEntity<SomeOutput> doServiceStuff(
HttpServletRequest request,
@RequestBody Map<String, Object> inputContent
) throws
ValidationException,
ServiceUnavailableException,
IOException,
WorkflowDocumentProcessingException
{
...
}
遗憾的是,当我 运行 我的服务并在 Swagger UI 上打开我的端点时,我看到的是:
这可能是什么原因造成的?我该如何调试?
P.S.: @EnableSwagger2
- class 的其余部分有效。
似乎已经有一个内部规则,原始类型 Map<String, Object>
覆盖了开发人员添加到 .alternateTypeRules()
的任何内容。
我能找到解决这个问题的唯一方法是创建一个 class MyInputMap extends Map<String, Object>
并在所有有问题的端点中使用它,同时还将类型规则调整为:
newRule(
typeResolver.resolve(MyInputMap.class),
typeResolver.resolve(InputExample.class)
)