diff --git a/.gitea/checker/comparator.py b/.gitea/checker/comparator.py index bb876e0..b44c9fc 100644 --- a/.gitea/checker/comparator.py +++ b/.gitea/checker/comparator.py @@ -249,7 +249,9 @@ def compare_endpoints( matched_removed: Set[str] = set() matched_added: Set[str] = set() - # 1. HTTP 方法变更检测(uri + controller + method_name 相同,但 method 不同) + # 1. HTTP 方法变更检测(uri + controller 相同,但 method 不同) + # 放宽匹配条件:只要同一个 Controller 的同一个 URI 请求方式改变,就识别为「修改请求方式」 + # 不再要求 method_name 相同(允许方法重命名场景) # 如果同时有参数变更,生成两条独立报告(方法变更 + 参数变更),互不干扰 for r_key, r_ep in unmatched_removed: for a_key, a_ep in unmatched_added: @@ -258,7 +260,6 @@ def compare_endpoints( if ( r_ep.uri == a_ep.uri and r_ep.controller_class == a_ep.controller_class - and r_ep.method_name == a_ep.method_name and r_ep.http_method != a_ep.http_method ): # 先生成纯方法变更报告 diff --git a/.gitea/checker/controller_ast_parser.py b/.gitea/checker/controller_ast_parser.py index 9c51237..ba76cc1 100644 --- a/.gitea/checker/controller_ast_parser.py +++ b/.gitea/checker/controller_ast_parser.py @@ -159,7 +159,10 @@ def _join_paths(base: str, sub: str) -> str: def _http_method(ann_name: str, ann: Annotation) -> str: - """从映射注解推断 HTTP 方法。""" + """从映射注解推断 HTTP 方法。 + + 支持大小写不敏感匹配,避免 PUTMapping、POSTMapping 等不规范写法导致解析失败。 + """ mapping = { "GetMapping": "GET", "PostMapping": "POST", @@ -167,9 +170,11 @@ def _http_method(ann_name: str, ann: Annotation) -> str: "DeleteMapping": "DELETE", "PatchMapping": "PATCH", } - if ann_name in mapping: - return mapping[ann_name] - if ann_name == "RequestMapping": + # 大小写不敏感匹配 + for key, value in mapping.items(): + if key.lower() == ann_name.lower(): + return value + if ann_name.lower() == "requestmapping": m = _ann_string(ann, "method") if m: return m.replace("RequestMethod.", "").upper()