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 不起作用。 POST和GET没问题。
获取失败。
可能的原因:
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();
}
您使用某种广告拦截器吗?如果是,您可以尝试禁用它。
我有一个 PUT 请求不会通过 OPENAPI 3.0 我遇到了 CORS 问题,但有趣的是,如果我接受 CURL 请求SwaggerUI 构建并将其放入任何 CLI 中,它可以完美运行。仅通过 SwaggerUI,PUT 不起作用。 POST和GET没问题。
获取失败。
可能的原因:
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();
}
您使用某种广告拦截器吗?如果是,您可以尝试禁用它。