diff --git a/.gitea/checker/comparator.py b/.gitea/checker/comparator.py index b5faeaa..a38d8da 100644 --- a/.gitea/checker/comparator.py +++ b/.gitea/checker/comparator.py @@ -31,6 +31,7 @@ class ParameterChange: required: Optional[bool] = None old_required: Optional[bool] = None detail: Optional[str] = None + description: Optional[str] = None def to_markdown_line(self, *, plain: bool = False) -> str: """ @@ -46,7 +47,8 @@ class ParameterChange: if req_required else '可选' ) - return f'> `{self.param_type}` **{self.param_name}** · {tag}' + desc = f" {self.description}" if self.description else "" + return f'> `{self.param_type}` **{self.param_name}** · {tag}{desc}' if self.change_type == ChangeType.REMOVED: return ( @@ -59,9 +61,10 @@ class ParameterChange: if req_required else '可选' ) + desc = f" {self.description}" if self.description else "" return ( f'【新增】 ' - f'`{self.param_type}` **{self.param_name}** · {tag}' + f'`{self.param_type}` **{self.param_name}** · {tag}{desc}' ) if self.change_type == ChangeType.RENAMED: return ( @@ -209,6 +212,7 @@ def compare_parameters( param_name=param.name, param_type=param.type, required=param.required, + description=param.description, ) ) @@ -365,6 +369,7 @@ def compare_endpoints( param_name=p.name, param_type=p.type, required=p.required, + description=p.description, ) for p in ep.parameters ], diff --git a/.gitea/checker/controller_ast_parser.py b/.gitea/checker/controller_ast_parser.py index ba76cc1..47d46f4 100644 --- a/.gitea/checker/controller_ast_parser.py +++ b/.gitea/checker/controller_ast_parser.py @@ -233,6 +233,27 @@ def _param_required(param: FormalParameter) -> bool: return not _has_ann(param, "Nullable") +def _param_description(param: FormalParameter) -> Optional[str]: + """提取参数描述,优先 Swagger 注解,其次 @RequestParam 的 value。""" + # 1. Swagger @ApiParam + ann = _find_ann(param, "ApiParam") + if ann: + desc = _ann_string(ann, "value", "name") + if desc: + return desc + + # 2. Swagger @ApiImplicitParam(方法级注解,较少见,暂不实现) + + # 3. Fallback: @RequestParam 的 value 作为描述提示 + ann = _find_ann(param, "RequestParam") + if ann: + val = _ann_string(ann, "value", "name") + if val and val != param.name: + return val + + return None + + class ControllerAstParser: """ 基于 javalang 的 Controller 解析器。 @@ -325,12 +346,14 @@ class ControllerAstParser: if _has_ann(param, "RequestBody"): return self._expand_dto(type_name, "body") + desc = _param_description(param) return [ ApiParameter( name=name, type=type_name, required=_param_required(param), source=_param_source(param), + description=desc, ) ] @@ -361,12 +384,19 @@ class ControllerAstParser: if "static" in (field.modifiers or []): continue for decl in field.declarators: + # 尝试提取 @ApiModelProperty 的描述 + desc = None + api_model_ann = _find_ann(field, "ApiModelProperty") + if api_model_ann: + desc = _ann_string(api_model_ann, "value") + fields.append( ApiParameter( name=decl.name, type=_type_to_str(field.type), required=not _has_ann(field, "Nullable"), source=source, + description=desc, ) ) diff --git a/.gitea/checker/notifier.py b/.gitea/checker/notifier.py index 3f3ad33..178843e 100644 --- a/.gitea/checker/notifier.py +++ b/.gitea/checker/notifier.py @@ -327,8 +327,8 @@ def send_parameter_change_notification( if changed_reports: # 构建参数变更通知(只包含参数变更报告) parts: List[str] = [] - parts.append("# API参数变更通知") - parts.append(f"- **修改人:** {push_user if push_user.startswith('@') else '@' + push_user}") + parts.append("# 【API参数变更通知】") + parts.append(f"- **修改人:** {push_user}") parts.append(f"- **修改时间:** {push_time}") parts.append("") for report in changed_reports: diff --git a/ftb/src/main/java/ftb/test/controller/CultureClockInController.java b/ftb/src/main/java/ftb/test/controller/CultureClockInController.java index 75a7395..32b3952 100644 --- a/ftb/src/main/java/ftb/test/controller/CultureClockInController.java +++ b/ftb/src/main/java/ftb/test/controller/CultureClockInController.java @@ -132,7 +132,7 @@ public class CultureClockInController { * @return jnpf.base.ActionResult */ @GetMapping(value = "/dynamic1") - public ActionResult getRecordList(@RequestParam(value = "cursorDate", required = false) Boolean cursorDate, + public ActionResult getRecordList(@RequestParam(value = "cursorDate1", required = false) Boolean cursorDate, @RequestParam(value = "limitNum", required = false, defaultValue = "10") Integer limitNum) { limitNum = Math.max(10, Math.min(limitNum, 30));