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 || "";