SwaggerUI在POST请求中丢失了contenType标头

时间:2018-09-27 13:43:18

标签: post content-type swagger-ui form-parameter

我正在使用swaggerUI验证我的swagger规范。

GET方法或带有主体的POST方法都可以正常工作,但是将POST方法与@FormParam一起使用时出现问题。我的服务器说请求中缺少内容类型,这是正确的,由SwaggerUi生成的命令看起来像这样

curl -X POST "https://localhost:8184/authentication/password/reset?username=chrome&newPassword=11114444" -H "accept: application/json"

我的swaggerUI代码看起来就是这样

 /user/delete:
post:
  tags:
  - "Usermanagement"
  summary: Löscht einen Nutzer
  description: Löscht einen Nutzer anhand seines "username"
  consumes: 
  - application/x-www-form-urlencoded
  produces: 
  - application/json
  parameters: 
  - in: query
    name: username
    type: "string"
    description: Benutzername
  responses:
    200:
      description: Nutzer wurde erfolgreich gelöscht
    400:
      description: Der Löschvorgang konnte nicht ausgeführt werden

我的服务器代码看起来像这样

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
@Path("/activation")
public Response activation(@NotNull @FormParam("username") String username,
        @NotNull @FormParam("active") Boolean active) {
    return runWithExceptionMapper(() -> {
        if (active) {
            userService.activateUser(username);
        } else {
            userService.deactivateUser(username);
        }
    });
}

服务器代码通常可以使用,可以在浏览器和Postman中使用。

我只是不知道为什么swaggerUI不使用curl命令发送contenttype或如何强制它这样做。

编辑: 我发现浏览器不是发送curl命令,而是发送http请求。但是有效载荷中仍然缺少内容,即内容类型。为什么我的服务器不知道如何处理“未知”数据。

1 个答案:

答案 0 :(得分:0)

问题解决了。

Mistake是我的参数类型。而不是查询,它应该是formData(很明显)。

正确的规范代码如下

/user/delete:
post:
tags:
- "Usermanagement"
summary: Löscht einen Nutzer
description: Löscht einen Nutzer anhand seines "username"
consumes: 
- application/x-www-form-urlencoded
produces: 
- application/json
parameters: 
  - in: formData
  name: username
  type: "string"
  description: Benutzername
responses:
  200:
    description: Nutzer wurde erfolgreich gelöscht
  400:
    description: Der Löschvorgang konnte nicht ausgeführt werden
相关问题