diff --git a/src/main/java/com/snp/batch/jobs/web/compliance/controller/ComplianceController.java b/src/main/java/com/snp/batch/jobs/web/compliance/controller/ComplianceController.java index f1a55f2..f88b107 100644 --- a/src/main/java/com/snp/batch/jobs/web/compliance/controller/ComplianceController.java +++ b/src/main/java/com/snp/batch/jobs/web/compliance/controller/ComplianceController.java @@ -10,9 +10,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; /** @@ -31,7 +31,7 @@ public class ComplianceController extends BaseBypassController { summary = "IMO 기반 선박 Compliance 조회 조회", description = "S&P API에서 IMO 기반 선박 Compliance 조회 데이터를 요청하고 응답을 그대로 반환합니다." ) - @GetMapping + @GetMapping("/CompliancesByImos") public ResponseEntity>> getComplianceData(@Parameter(description = "IMO(최대 100개)") @RequestParam(required = true) String imos) { return execute(() -> complianceBypassService.getComplianceData(imos)); diff --git a/src/main/java/com/snp/batch/service/BypassCodeGenerator.java b/src/main/java/com/snp/batch/service/BypassCodeGenerator.java index c39e33d..1088079 100644 --- a/src/main/java/com/snp/batch/service/BypassCodeGenerator.java +++ b/src/main/java/com/snp/batch/service/BypassCodeGenerator.java @@ -207,7 +207,7 @@ public class BypassCodeGenerator { ? "import org.springframework.web.bind.annotation.PostMapping;\n" : "import org.springframework.web.bind.annotation.GetMapping;\n"; - String mappingPath = buildMappingPath(params); + String mappingPath = buildMappingPath(params, config.getExternalPath()); String requestMappingPath = "/api/" + domain; return """ @@ -347,20 +347,35 @@ public class BypassCodeGenerator { } /** - * @GetMapping / @PostMapping에 붙는 경로 생성 (PATH 파라미터가 있는 경우) + * @GetMapping / @PostMapping에 붙는 경로 생성 + * externalPath의 마지막 세그먼트를 내부 경로로 사용 + PATH 파라미터 추가 + * 예: /RiskAndCompliance/CompliancesByImos → ("/CompliancesByImos") + * PATH 파라미터 imo 추가 시 → ("/CompliancesByImos/{imo}") */ - private String buildMappingPath(List params) { + private String buildMappingPath(List params, String externalPath) { + // externalPath에서 마지막 세그먼트 추출 + String endpointSegment = ""; + if (externalPath != null && !externalPath.isEmpty()) { + String[] segments = externalPath.split("/"); + if (segments.length > 0) { + endpointSegment = "/" + segments[segments.length - 1]; + } + } + + // PATH 파라미터 추가 List pathParams = params.stream() .filter(p -> "PATH".equalsIgnoreCase(p.getParamIn())) .sorted((a, b) -> Integer.compare(a.getSortOrder(), b.getSortOrder())) .toList(); - if (pathParams.isEmpty()) { + String pathSuffix = pathParams.stream() + .map(p -> "{" + p.getParamName() + "}") + .collect(Collectors.joining("/", pathParams.isEmpty() ? "" : "/", "")); + + String fullPath = endpointSegment + pathSuffix; + if (fullPath.isEmpty()) { return ""; } - String path = pathParams.stream() - .map(p -> "{" + p.getParamName() + "}") - .collect(Collectors.joining("/", "/", "")); - return "(\"" + path + "\")"; + return "(\"" + fullPath + "\")"; } /**