forked from kimhyungsik/ax_hub_mcp_tool
revert: Move DTOs back to biz module
This commit is contained in:
30
refactor.py
30
refactor.py
@@ -1,30 +0,0 @@
|
||||
import os
|
||||
|
||||
project_root = r"C:\Users\Admin\.gemini\antigravity\scratch\axhub-backend-main"
|
||||
|
||||
replacements = {
|
||||
"package io.shinhanlife.axhub.biz.mcp.tool.dto;": "package io.shinhanlife.axhub.common.mcp.tool.dto;",
|
||||
"package io.shinhanlife.axhub.biz.mcp.adapter.dto;": "package io.shinhanlife.axhub.common.mcp.adapter.dto;",
|
||||
"package io.shinhanlife.axhub.biz.mcp.gateway.dto;": "package io.shinhanlife.axhub.common.mcp.gateway.dto;",
|
||||
"import io.shinhanlife.axhub.biz.mcp.tool.dto": "import io.shinhanlife.axhub.common.mcp.tool.dto",
|
||||
"import io.shinhanlife.axhub.biz.mcp.adapter.dto": "import io.shinhanlife.axhub.common.mcp.adapter.dto",
|
||||
"import io.shinhanlife.axhub.biz.mcp.gateway.dto": "import io.shinhanlife.axhub.common.mcp.gateway.dto"
|
||||
}
|
||||
|
||||
for root, dirs, files in os.walk(project_root):
|
||||
for file in files:
|
||||
if file.endswith(".java"):
|
||||
file_path = os.path.join(root, file)
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
modified = False
|
||||
for old, new in replacements.items():
|
||||
if old in content:
|
||||
content = content.replace(old, new)
|
||||
modified = True
|
||||
|
||||
if modified:
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
print(f"Updated {file_path}")
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.adapter.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.adapter.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.adapter.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.adapter.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.adapter.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.adapter.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.adapter.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.adapter.dto;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -1,10 +1,10 @@
|
||||
package io.shinhanlife.axhub.biz.mcp.adapter.support;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.connector.LegacyEimsConnector;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.ErrorDetail;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcRequest;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.Params;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.ErrorDetail;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcRequest;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.Params;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -3,11 +3,11 @@ package io.shinhanlife.axhub.biz.mcp.gateway.client;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.connector.LegacyEimsConnector;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.connector.ThirdPartySecurityConnector;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcRequest;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.Params;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcRequest;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.Params;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.util.PiiMaskingUtils;
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.common.mcp.security.SecurityProperties;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.messaging.KafkaProducerService;
|
||||
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.shinhanlife.axhub.biz.mcp.gateway.config;
|
||||
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
|
||||
@@ -3,11 +3,11 @@ package io.shinhanlife.axhub.biz.mcp.gateway.controller;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.connector.LegacyEimsConnector;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.connector.ThirdPartySecurityConnector;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcRequest;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.Params;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcRequest;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.Params;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.util.PiiMaskingUtils;
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.service.ExecuteService;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.registry.RedisRegistryService;
|
||||
import io.shinhanlife.axhub.common.mcp.security.SecurityProperties;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.gateway.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.gateway.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.shinhanlife.axhub.biz.mcp.gateway.registry;
|
||||
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.shinhanlife.axhub.biz.mcp.gateway.router;
|
||||
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.registry.RedisRegistryService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package io.shinhanlife.axhub.biz.mcp.gateway.service;
|
||||
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.Params;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.Params;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -10,7 +10,7 @@ import io.shinhanlife.axhub.biz.mcp.gateway.router.ToolRouter;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.router.ResponseAggregator;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.client.ToolClient;
|
||||
import java.util.Map;
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.shinhanlife.axhub.common.mcp.tool.dto;
|
||||
package io.shinhanlife.axhub.biz.mcp.tool.dto;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpParameter;
|
||||
import lombok.Getter;
|
||||
@@ -2,7 +2,7 @@ package io.shinhanlife.axhub.biz.mcp.tool.registry;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpFunction;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpTool;
|
||||
import io.shinhanlife.axhub.common.mcp.gateway.dto.ToolMetadata;
|
||||
import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.util.JsonSchemaGenerator;
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.BillingStatusReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.BillingProcessReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.BillingStatusReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.BillingProcessReq;
|
||||
|
||||
@McpTool(
|
||||
name = "billing_process_tool",
|
||||
|
||||
@@ -2,8 +2,8 @@ package io.shinhanlife.axhub.biz.mcp.tool.service;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpFunction;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpTool;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.BondCheckReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.BondIssueReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.BondCheckReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.BondIssueReq;
|
||||
|
||||
@McpTool(
|
||||
name = "bond_issue_tool",
|
||||
|
||||
@@ -2,10 +2,10 @@ package io.shinhanlife.axhub.biz.mcp.tool.service;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpFunction;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpTool;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.VacationRegisterReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.LeaveCountReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.SmsSendReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.EmailSendReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.VacationRegisterReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.LeaveCountReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.SmsSendReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.EmailSendReq;
|
||||
|
||||
@McpTool(
|
||||
name = "common_utility_tool",
|
||||
|
||||
@@ -2,8 +2,8 @@ package io.shinhanlife.axhub.biz.mcp.tool.service;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpFunction;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpTool;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.ContractStatusReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.ContractDetailReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.ContractStatusReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.ContractDetailReq;
|
||||
|
||||
@McpTool(
|
||||
name = "contract_inquiry_tool",
|
||||
|
||||
@@ -2,8 +2,8 @@ package io.shinhanlife.axhub.biz.mcp.tool.service;
|
||||
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpFunction;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpTool;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.CustomerGradeReq;
|
||||
import io.shinhanlife.axhub.common.mcp.tool.dto.CustomerDetailReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.CustomerGradeReq;
|
||||
import io.shinhanlife.axhub.biz.mcp.tool.dto.CustomerDetailReq;
|
||||
|
||||
@McpTool(
|
||||
name = "customer_info_tool",
|
||||
|
||||
@@ -22,9 +22,8 @@ import java.util.Scanner;
|
||||
public class ToolScaffolder {
|
||||
|
||||
private static final String BASE_PACKAGE = "io.shinhanlife.axhub.biz.mcp.tool";
|
||||
// 프로젝트 루트 기준 상대 경로
|
||||
private static final String BASE_PATH = "src/main/java/io/shinhanlife/axhub/biz/mcp/tool";
|
||||
private static final String COMMON_DTO_PACKAGE = "io.shinhanlife.axhub.common.mcp.tool.dto";
|
||||
private static final String COMMON_DTO_PATH = "src/main/java/io/shinhanlife.axhub.common.mcp.tool.dto";
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
@@ -56,7 +55,7 @@ public class ToolScaffolder {
|
||||
|
||||
private static void scaffold(String baseName, String interfaceId, String description, String group, String routingType) throws IOException {
|
||||
Path serviceDir = Paths.get(BASE_PATH, "service");
|
||||
Path dtoDir = Paths.get(COMMON_DTO_PATH);
|
||||
Path dtoDir = Paths.get(BASE_PATH, "dto");
|
||||
|
||||
Files.createDirectories(serviceDir);
|
||||
Files.createDirectories(dtoDir);
|
||||
@@ -66,7 +65,7 @@ public class ToolScaffolder {
|
||||
|
||||
// Generate Req DTO
|
||||
String reqContent = """
|
||||
package %s;
|
||||
package %s.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
@@ -76,12 +75,12 @@ public class ToolScaffolder {
|
||||
public class %sReq {
|
||||
// TODO: Add request fields here
|
||||
}
|
||||
""".formatted(COMMON_DTO_PACKAGE, baseName);
|
||||
""".formatted(BASE_PACKAGE, baseName);
|
||||
Files.writeString(dtoDir.resolve(baseName + "Req.java"), reqContent);
|
||||
|
||||
// Generate Res DTO
|
||||
String resContent = """
|
||||
package %s;
|
||||
package %s.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
@@ -93,7 +92,7 @@ public class ToolScaffolder {
|
||||
private String message;
|
||||
// TODO: Add response fields here
|
||||
}
|
||||
""".formatted(COMMON_DTO_PACKAGE, baseName);
|
||||
""".formatted(BASE_PACKAGE, baseName);
|
||||
Files.writeString(dtoDir.resolve(baseName + "Res.java"), resContent);
|
||||
|
||||
// Generate Service
|
||||
@@ -102,8 +101,8 @@ public class ToolScaffolder {
|
||||
|
||||
import %s.annotation.McpFunction;
|
||||
import %s.annotation.McpTool;
|
||||
import %s.%sReq;
|
||||
import %s.%sRes;
|
||||
import %s.dto.%sReq;
|
||||
import %s.dto.%sRes;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@@ -124,7 +123,7 @@ public class ToolScaffolder {
|
||||
return executeLegacy("%s", "%s", req);
|
||||
}
|
||||
}
|
||||
""".formatted(BASE_PACKAGE, BASE_PACKAGE, BASE_PACKAGE, COMMON_DTO_PACKAGE, baseName, COMMON_DTO_PACKAGE, baseName,
|
||||
""".formatted(BASE_PACKAGE, BASE_PACKAGE, BASE_PACKAGE, BASE_PACKAGE, baseName, BASE_PACKAGE, baseName,
|
||||
toolName, description, group, routingType, baseName, description, interfaceId, baseName, routingType, interfaceId);
|
||||
|
||||
Files.writeString(serviceDir.resolve(baseName + "Service.java"), serviceContent);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package io.shinhanlife.axhub.common.mcp.exception;
|
||||
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.ErrorDetail;
|
||||
import io.shinhanlife.axhub.common.mcp.adapter.dto.JsonRpcResponse;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.ErrorDetail;
|
||||
import io.shinhanlife.axhub.biz.mcp.adapter.dto.JsonRpcResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
|
||||
Reference in New Issue
Block a user