是否可以使用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不能列出任何参数。
答案 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 ...)
};