如何Swagger注释Spring GET @RequestMapping具有复杂的对象

时间:2017-06-30 15:25:17

标签: java spring spring-mvc swagger swagger-ui

问题是我有一个复杂的Object作为GET-Request的请求参数,并在我将Swagger Annotations放入Object之后。 Swagger UI显示条目参数是我必须放置参数的主体。

 body: {
      "modelId": 0,
      "makeId": 0
    }

我的REST控制器看起来像这样

  @RequestMapping(method = RequestMethod.GET, value = "/model")
  public SearchModelsResponse searchModels(
      @ApiParam(value = "Search for something",
          required = true) final ModelSearch search) {...}

请求对象

public class ModelSearch {

  @ApiParam(value = "Something important)", required = true)
  private Long modelId;

  @ApiParam(value = "Something else important)", required = false)
  @Nullable
  private Long makeId;

  ....
  }

是否有正确的方法对其进行注释,因此Swagger将其显示为正确的请求参数而不是正文构造?

1 个答案:

答案 0 :(得分:2)

确定这种情况下的解决方案是手动定义参数,这可以使用@ApiImplicitParam注释。

结果这看起来像这样。

  @ApiImplicitParams({
    @ApiImplicitParam(name = "modelId", value = "this is modelId", required = true, dataType = "string", paramType = "query"),
    @ApiImplicitParam(name = "makeId", value = "this is makeId", required = true, dataType = "string", paramType = "query")
  })
  @RequestMapping(method = RequestMethod.GET, value = "/model")
  public SearchModelsResponse searchModels(
      final ModelSearch search) {...}

这不是一个漂亮的解决方案,因为我实际上想要大声解释我的代码,但结果提供了将其显示为请求参数而不是作为主体构造的选项。