Swagger for Play: запрос DELETE всегда возвращает недопустимый Json

Я только что загрузил последний дистрибутив Swagger-UI... и похоже, что он больше не работает при отправке запроса DELETE без тела JSON, имейте в виду, что это отлично работало с предыдущей версией. Ниже приведены мои аннотации:

@ApiOperation(
  httpMethod = "DELETE",
  nickname = "delete",
  value = "Deletes an user",
  response = classOf[Void])
@ApiResponses(Array(
  new ApiResponse(code = 400, message = "Invalid user id"),
  new ApiResponse(code = 401, message = "Request not authorized"),
  new ApiResponse(code = 403, message = "User does not have required privileges"),
  new ApiResponse(code = 404, message = "User not found"),
  new ApiResponse(code = 412, message = "Authentication precondition failed"),
  new ApiResponse(code = 500, message = "Error processing delete user request")))
def delete(
  @ApiParam(
    name = "userId",
    value = "The id of the user to delete",
    required = true)
    @PathParam("userId")
    userId: String) = SecuredAction.async { implicit request =>
  ...
}

Всякий раз, когда я отправляю запрос DELETE, я всегда получаю следующий ответ (неверный запрос):

For request 'DELETE /auth/users/5392238c1e04001e04b384b4' [Invalid Json]

Опять же, я не изменил свой исходный код, и если я откатываюсь к предыдущей версии Swagger-UI, он работает, как и ожидалось. Я что-то упускаю? В случае, если есть обходной путь, чтобы заставить его работать?


person j3d    schedule 07.07.2014    source источник
comment
Мое тело не содержит никаких данных, так как я только что отправил идентификатор пользователя для удаления в URL-адресе. Почему я должен отправлять данные Json в запросе DELETE? Может я не понял сути...   -  person j3d    schedule 08.07.2014


Ответы (2)


Не уверен, что у вас все еще есть проблемы с этим, но у меня также была проблема с недопустимым Json при отправке запроса DELETE через swagger.

Я исправил это в коде, добавив строку в swagger.js. В swagger.js есть метод SwaggerRequest.prototype.setHeaders. В моей версии это примерно строка 1221 (может быть другой, потому что я изменил и другой код). В этом методе должно быть утверждение

else if (this.type == "DELETE")
  body = "{}";

Я изменил это на следующее

else if (this.type == "DELETE") {
  body = "{ }";
  params.body = body;
}

Затем, если я удаляю через чванство, я больше не получаю Invalid Json.

person Bakie    schedule 08.08.2014
comment
Да... это была ошибка, и она была исправлена. Просто скачайте последнюю версию с GitHub. Спасибо, в любом случае ;-) - person j3d; 08.08.2014

Это была ошибка в дистрибутиве пользовательского интерфейса Swagger. В последней версии это исправлено.

person j3d    schedule 08.08.2014