Swagger OpenApi 3.0 不允许 PUT 请求仅 POST 和 GET 工作

Swagger OpenApi 3.0 not allowing a PUT requests only POST and GET work

我有一个 PUT 请求不会通过 OPENAPI 3.0 我遇到了 CORS 问题,但有趣的是,如果我接受 CURL 请求SwaggerUI 构建并将其放入任何 CLI 中,它可以完美运行。仅通过 SwaggerUI,PUT 不起作用。 POSTGET没问题。

获取失败。
可能的原因:
CORS
网络故障
URL CORS 请求的方案必须是“http”或“https”。

如果我得到 JSON 文件定义,它的内容如下。我可以看到 PUT 不在“Access-Control-Allow-Methods”中,但我不知道如何添加它。

$ curl -I "http://192.168.2.120:8087/medic/ic-swagger.json"
HTTP/1.1 200 行
服务器:nginx
日期:2021 年 7 月 27 日,星期二 14:55:25 GMT
Content-Type: application/json
Content-Length: 25275
Last-Modified:2021 年 7 月 27 日,星期二 14:54:22 格林威治标准时间
连接:keep-alive
ETag:“61001e1e-62bb”
过期时间:2021 年 7 月 27 日,星期二 14:55:24 GMT
Cache-Control: no-cache
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods:获取,POST,选项
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-
Modified-Since,Cache-Control,Content-Type
Accept-Ranges: 字节数

下面的简单 PUT 请求

/user/login:
  put:
    tags: [GETTING STARTED]
    summary: Log a user in.
    description: Log a user in and get an Id.
    requestBody:
      required: true
      content:
        text/plain:
          schema:
            $ref: '#/components/schemas/loginBody'
    responses:
      '200':
        description: Successful user login. RESULT will hold the new Id
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Login_response_1'

通过 POSTMAN 没问题,在 header 中您会发现:

Access-Control-Allow-Methods: POST, GET, PUT, UPDATE, OPTIONS, HEAD 
Access-Control-Allow-Origin: * 

如有任何帮助,我们将不胜感激。

好吧,我是从一些旧代码中找出来的,但不记得为什么它有效或者它是否是正确的解决方案 ,如果有人可以解释,请。所以我发现,如果我添加一个 OPTIONS REST 调用,那么一切正常。似乎预检去了那里并获得了 Access-Control-Allow-Origin 然后允许调用通过。

    @OPTIONS
@Path("user/login")
@Produces(MediaType.APPLICATION_JSON)
public Response optionsLogin() {
    
    Response.ResponseBuilder res = 
    
     Response.ok()
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Credentials", "true")
            .header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS, HEAD")
            .header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
    
    return res.build();
} 

您使用某种广告拦截器吗?如果是,您可以尝试禁用它。