用于多值地图Jersey的Swagger API?可能吗?

时间:2013-01-12 16:19:37

标签: java api documentation jersey swagger

是否可以使用Swagger通过Jersey中MultivaluedMap param的注释制作API文档?

我有一小段这样的代码:

/**
 * Method which serves requests of adding {@link StudentGroup} to DB
 * 
 * @param name
 * @param description
 * @return {@link Response}
 * @throws RestServiceException
 */
 @POST
 @Path("/add")
 public Response addStudentGroup(MultivaluedMap<String, String> formParams) throws 
     RestServiceException {
     String name = formParams.getFirst("name");
     String description = formParams.getFirst("description");
     String studentIds = formParams.getFirst("studentIds");

     (...)

}

我希望使用@ApiParam使用Swagger和Swagger UI生成包含文档数据的JSON

如果我将@ApiParam放在MultivaluedMap<String, String> formParams之前,它就不起作用。 Swagger不能列出任何参数。

3 个答案:

答案 0 :(得分:2)

似乎这是Swagger中的一个错误 - 我也得到了这种行为。使用具有两个类型参数的其他泛型类(如@ApiParam()HashMap)可以正常工作。可能会抛出解析器。

我在an issue for this上打开了Swagger bug tracking system

你也可以问他们on their Google group或者在Freenode#swagger的IRC上找到他们。

答案 1 :(得分:1)

目前不支持,但正如Eyal所说,在github问题上打开了一张票,它可能相当容易实现。

答案 2 :(得分:0)

我可以这样解决这个问题。我们可以利用Swagger API提供的@APIImplicitParams注释来列出MultiValueMap的所有表单元素,并在MultiValueMap本身上使用@APIignore。请尝试以下代码行上的某些内容是否有效。祝好运。 :)

@ApiOperation(value = "Create a new 'Student' object")
@ApiImplicitParams({
      @ApiImplicitParam(name = "X-ClientId", value = "X-ClientId", required = true, dataType = "String", paramType = "header"),
      @ApiImplicitParam(name = "id", value = "Enter an ID for the student.", dataTypeClass = String.class, paramType = "query"),
      @ApiImplicitParam(name = "name", value = "Enter a Name for the Student.", dataTypeClass = String.class, paramType = "query")
  })
  ResponseEntity addStudent(
      @NotBlank @RequestHeader(value = X_CLIENTID) String headerXclient,
      @ApiIgnore @RequestParam MultiValueMap<String, String> requestParams) {
          StudentRequest request = new StudentRequest(requestParams);

          (... Your Code Implementation ...)
      };