From 9981459691c836bfd33b6b81a8e6aa22ca12446a Mon Sep 17 00:00:00 2001 From: Rinjae Date: Fri, 24 Jul 2026 09:44:28 +0900 Subject: [PATCH] =?UTF-8?q?"SwaggerUI=20-=20=EC=8B=A4=ED=96=89=20=EC=A0=84?= =?UTF-8?q?=20=EC=9D=91=EB=8B=B5=20UI=20=EB=85=B8=EC=B6=9C=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20-=20Execu?= =?UTF-8?q?te=20=ED=81=B4=EB=A6=AD=20=EC=97=AC=EB=B6=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20pendingExecute=20=ED=94=8C=EB=9E=98=EA=B7=B8=20?= =?UTF-8?q?=EB=8F=84=EC=9E=85=20-=20=EB=84=A4=ED=8A=B8=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC/=EC=9D=91=EB=8B=B5=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=20=EC=8B=9C=20=ED=94=8C=EB=9E=98=EA=B7=B8=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EC=B6=94=EA=B0=80"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/swaggerUI/djb-swagger-response.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/resources/static/plugins/swaggerUI/djb-swagger-response.js b/src/main/resources/static/plugins/swaggerUI/djb-swagger-response.js index 574ffce..eb5239b 100644 --- a/src/main/resources/static/plugins/swaggerUI/djb-swagger-response.js +++ b/src/main/resources/static/plugins/swaggerUI/djb-swagger-response.js @@ -26,6 +26,9 @@ var startTs = 0; var targetOpblock = null; + // Execute 클릭 후에만 true. spec 로딩 등 실행 외 응답이 responseInterceptor 로 + // 들어와도 그리드를 만들지 않기 위한 게이트 (실행 전 UI 미노출 보장). + var pendingExecute = false; function now() { return (global.performance && performance.now) ? performance.now() : Date.now(); @@ -206,6 +209,7 @@ // 네트워크/CORS 실패 렌더: responseInterceptor 로 오지 않고 store 에만 error 로 남는 케이스. function renderNetworkError(msg) { + pendingExecute = false; var grid = gridFor(targetOpblock); if (!grid) return; grid.classList.remove("djb-empty"); @@ -250,6 +254,7 @@ } startTs = now(); + pendingExecute = true; var grid = gridFor(targetOpblock); if (grid) { grid.classList.add("djb-empty"); @@ -264,10 +269,13 @@ */ function renderResponse(res) { if (!res) return; - // spec 로딩 응답(/…/swagger.json)은 responseInterceptor 로도 들어온다. 이때 렌더하면 - // 실행 전인데 응답 본문에 OpenAPI spec 이 그려지므로 무시한다. 사용자 API 호출은 - // 프록시(/api/call-api)로 나가므로 url 에 swagger.json 이 없다. + // Execute 를 누른 적 없으면 무시 — spec 로딩(/…/swagger.json) 응답도 + // responseInterceptor 로 들어오는데, 이때 렌더하면 실행 전 응답 본문에 + // OpenAPI spec 이 그려진다. url 검사는 버전에 따라 res.url 이 비어 무력화될 + // 수 있어 실행 게이트를 1차 방어로 둔다. + if (!pendingExecute) return; if (res.url && res.url.indexOf("swagger.json") !== -1) return; + pendingExecute = false; var ms = Math.max(0, Math.round(now() - startTs)); var status = res.status || 0; var statusText = res.statusText || "";