- JSP: OpenAPI Spec 모달 처리 개선 - 동적 크기 조절 및 스타일 추가

- Service: GET/DELETE 요청 바디 항목→쿼리 파라미터 매핑 로직 추가
- JS: 요청 정보 진입 시 탭 자동 전환 로직(firstReqTabWithData) 구현
This commit is contained in:
Rinjae
2026-07-13 15:30:08 +09:00
parent 4530af9dec
commit 8ccf52fd66
5 changed files with 106 additions and 286 deletions
@@ -448,14 +448,24 @@ public class ApiSpecManService {
// 헤더/바디 분리
RequestComponents components = separateHeaderAndBody(requestLayout.getLayoutItems());
// 헤더 파라미터 처리
if (!components.headerItems.isEmpty()) {
boolean bodyRequired = isRequestBodyRequired(httpMethod);
// 헤더 파라미터 + (POST/PUT 이 아니면) 요청 바디 항목을 쿼리스트링 파라미터로 함께 담는다.
boolean hasHeader = !components.headerItems.isEmpty();
boolean queryFromBody = !bodyRequired && !components.bodyItems.isEmpty();
if (hasHeader || queryFromBody) {
ArrayNode parameters = operation.putArray("parameters");
generateHeaderParameters(parameters, components.headerItems);
if (hasHeader) {
generateHeaderParameters(parameters, components.headerItems);
}
// GET/DELETE 등 바디 미사용 메소드: 요청 레이아웃 바디 항목 → 쿼리 파라미터(in=query)
if (queryFromBody) {
generateQueryParameters(parameters, components.bodyItems);
}
}
// Body 처리 (POST, PUT 메소드인 경우)
if (isRequestBodyRequired(httpMethod)) {
if (bodyRequired) {
ObjectNode requestBody = operation.putObject("requestBody");
requestBody.put("required", true);
ObjectNode content = requestBody.putObject("content");
@@ -561,6 +571,35 @@ public class ApiSpecManService {
}
}
/**
* GET/DELETE 등 바디 미사용 메소드: 요청 레이아웃 바디 항목을 쿼리스트링 파라미터(in=query)로 매핑.
* 스칼라 FIELD 만 대상(GROUP/GRID 중첩 객체·배열은 쿼리스트링에 부적합하여 제외), root(serno 0)는 스킵.
*/
private void generateQueryParameters(ArrayNode parameters, List<LayoutItemUI> bodyItems) {
for (LayoutItemUI item : bodyItems) {
if (item.getLoutItemSerno() != null && item.getLoutItemSerno() == 0) {
continue;
}
if (!"FIELD".equalsIgnoreCase(item.getLoutItemType())) {
continue;
}
ObjectNode parameter = parameters.addObject();
parameter.put("name", item.getLoutItemName());
parameter.put("in", "query");
if (StringUtils.isNotEmpty(item.getLoutItemDesc())) {
parameter.put("description", item.getLoutItemDesc());
}
parameter.put("required", false); // 기본값 false, 필요시 사용자가 변경
ObjectNode schema = parameter.putObject("schema");
schema.put("type", mapSwaggerType(item.getLoutItemDataType()));
int length = item.getLoutItemLength();
if (length > 0) {
schema.put("maxLength", length);
}
}
}
private void generateResponseHeaders(ObjectNode headers, List<LayoutItemUI> headerItems) {
for (LayoutItemUI item : headerItems) {
if ("FIELD".equalsIgnoreCase(item.getLoutItemType())) {