我在Swagger中有以下代码,
@Path("/v1")
@ApiOperation(value = "POST - Some Value", nickname = "post-funtion", consumes = "application/json", produces = "text/html; charset=UTF-8", tags = {
"Some Controller" })
@ApiImplicitParams({
@ApiImplicitParam(name = "Authorization", paramType = "header", dataType = "string", format = "JWT", required = false, value = "A User Service JWT"),
@ApiImplicitParam(name = "Request", value = "Request Object", paramType = "body", dataType = "org.pkg.SomeRequest", required = true) })
@ApiResponses({
@ApiResponse(code = 200, message = "Value Added", response = SomeResponse.class) })
private Object retrieveByName(Request request, Response response)
{
return new RetrieveByNameRqstHandler(catalogService, request, response).handle();
}
代码应该自动生成默认的json请求,具体取决于数据类型,在这种情况下是"org.pkg.SomeRequest"
,但没有生成任何内容。相反,如果我更改" org.pkg.SomeRequest"使用"org.pkg.SomeResponse"
,为此生成了默认的JSON。请有人帮帮我吗?
考虑两个类SomeRequest,SomeResponse具有相同的代码。
这是我在dataType中使用"org.pkg.SomeRequest"
的图像
这是我在dataType
中使用"org.pkg.SomeResponse"
的图片
答案 0 :(得分:2)
根据Swagger核心项目中的这个GitHub issue,如果你添加注释@ApiImplicitParam
应解决你的问题。
@ApiImplicitParams({
@ApiImplicitParam(
required = true,
dataType = "com.example.SomeObjectDto",
paramType = "body"
)
})
但通常如果您只是在方法签名上添加该类,它就会起作用。
private Object retrieveByName(SomeObjectDto someObjectDto) {
someCode();
}
SomeObjectDto类也应包含" get"变量的方法,如。
class SomeObjectDto {
private String info;
getInfo(){
return info;
}
}
将生成以下JSon。
{info:" string" }
答案 1 :(得分:0)
ApiImplicitParam
可以将参数映射到正确的类型,但是该类型必须通过摇晃来检测,因此必须是有效的引用。
我可以使之起作用的唯一方法是使用additionalModels
方法。
spring-boot中的示例:
配置招摇
import springfox.documentation.spring.web.plugins.Docket;
import com.fasterxml.classmate.TypeResolver;
...
@Bean
public Docket api(TypeResolver typeResolver) {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("your-group-rest-api")
.select()
.apis(RequestHandlerSelectors.basePackage("your.package"))
.paths(PathSelectors.any())
.build()
.additionalModels(typeResolver.resolve(YourModel.class))
.apiInfo(apiInfo());
}
控制器
@ApiOperation...
@ApiImplicitParams(
@ApiImplicitParam(dataType = "YourModel", name = "requestJson", paramType = "body"))
@ApiResponses...
@RequestMapping...
public void yourMethod(@RequestBody String requestJson,...)
当然,您可以为请求提供一个InputStream参数,并将其映射到您的模型。