You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot 2.7.0多模块下优雅覆写Controller的方案咨询

方案二:兼容原/share接口,支持可选传入userId

这种方案保留原接口路径,用户可选择是否传入userId参数,无需修改接口地址。

1. 用子类DTO接收参数

ShareAdditionalDTO继承自ShareDTO,Spring MVC会自动兼容两种请求格式:仅传url,或同时传url和userId。

2. 覆盖原Controller的方法

在模块B编写继承自ShareController的新Controller,覆盖原share方法,用ShareAdditionalDTO作为参数:

@RestController
@RequestMapping("/share")
public class ShareAdditionalController extends ShareController {

    @Override
    @PutMapping("")
    @ApiOperation("支持可选userId的分享接口")
    public void share(@RequestBody ShareAdditionalDTO share) {
        // 扩展逻辑:userId不为空时处理额外逻辑
        if (share.getUserId() != null) {
            // 新增的userId相关处理
        }
        // 复用或重写原业务逻辑
    }
}

3. 标记userId为可选参数

在ShareAdditionalDTO的字段上添加Swagger注解,明确标记为可选:

@Data
public class ShareAdditionalDTO extends ShareDTO{
   
   @ApiParam(value = "用户ID(可选)", required = false)
   private String userId;

}

4. 避免重复加载原Controller(可选)

为防止模块A的ShareController被实例化导致Swagger展示重复接口,修改模块A的ShareController注解:

@RestController
@RequestMapping("/share")
@ConditionalOnMissingBean({ShareAPI.class, ShareAdditionalController.class})
public class ShareController implements ShareAPI {
    // ... 原有代码
}

内容的提问来源于stack exchange,提问作者linxiao yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:05:14