在Swagger中为请求参数提供样本值

时间:2016-09-02 15:04:05

标签: java rest spring-boot swagger

我在Spring-Boot RestController中有一个rest方法的方法签名,如下所示:

@RequestMapping(
        value = "/path",
        method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_JSON_VALUE,
        produces = MediaType.APPLICATION_JSON_VALUE
)
@ApiImplicitParams({
        @ApiImplicitParam(
                name = "message", 
                value = "Message that is sent to the method", 
                required = true, 
                dataType = "string", 
                paramType = "body"
        )
})
public @ResponseBody String receiveMessage(@RequestBody String message) {
    // ...

    return "{\"success\": true}";
}

我想提供一个"样本"作为JSON字符串的message参数的值(例如{"key" : "value"})。有人知道如何使用Swagger注释做到这一点吗?我试过了

@ApiImplicitParams({
        @ApiImplicitParam(
                // ...
                example = "...JSON value..."
        )
})

但它没有用。我想要的是一个"样本值"在文档中,读者可以单击以在文档中填充给定样本值的参数值字段。这可能吗?

以下是它的外观截图:

enter image description here

只是为了防止"无用"回答:由于我的业务逻辑,我无法将参数的类型从String更改为某个类类型。

3 个答案:

答案 0 :(得分:5)

不幸的是,您无法为原子参数(String,Number,...)提供示例或示例值。

如果参数是具有架构的对象,则只能提供示例,您只需要在属性说明中添加example属性:

properties:
  firstName:
    description: first name
    type: string
    example: John

作为最后的手段,您可以在参数的说明中添加示例值(value注释中的ApiImplicitParam)。

    @ApiImplicitParam(
            name = "message", 
            value = "Message that is sent to the method. Example: value", 
            required = true, 
            dataType = "string", 
            paramType = "body"
    )

答案 1 :(得分:0)

对于Spring Boot用户,假设您具有REST方法,则接受json主体,但由于某些原因未明确使用@RequestBody。请按照以下步骤生成正确的Swagger文档

SpringFox配置bean更新为其他模型

@Bean
public Docket apiDocket() {
     return new Docket(DocumentationType.SWAGGER_2)
             // ...
             .additionalModels(new TypeResolver().resolve(YourRequestModel.class));
}

更新@ApiImplicitParams的控制器API

@PostMapping("/your-api")
@ApiOperation(value = "brief description", notes = "Greater details come here")
@ApiImplicitParams({
   @ApiImplicitParam(paramType = "header", name = "x-locale", example = "en"),
   @ApiImplicitParam(paramType = "body", dataType = "YourRequestModel")
})
public YourResponsetModel processRequest() {
   // ...
   return null;
}

这将生成带有可选标头x-locale和类型body的{​​{1}}的Swagger。

答案 2 :(得分:0)

您可以尝试以下方法:

public MyObject myController(@ApiParam(example = "examplestring") @RequestParam("name") String name,
            @ApiParam(example = "1")@RequestParam("eventNo") int eventNo, @ApiParam(example = "2")@RequestParam("halRequestNo") int halRequestNo){