我的springboot版本是2.7.0 在maven多模块项目中,我有两个名为A和B的模块,B依赖A。
在模块 A 中,有一个控制器,例如
@Api(tags = "share api")
public interface ShareAPI {
public void share(ShareDTO dto);
}
@RestController
@RequestMapping("/share")
@ConditionalOnMissingBean(ShareAPI.class)
public class ShareController implements ShareAPI {
@PutMapping("")
@Override
public void share(@RequestBody ShareDTO share){
// do something
}
// ... other methods
}
@Data
public class ShareDTO {
private String url;
}
在模块B中,我想扩展ShareController中share方法的功能:需要在参数中添加一个新的userId字段。
因此我创建了一个新的 DTO 扩展 ShareDTO 并向新的 DTO 添加了一个 userId 字段
@Data
public class ShareAdditionalDTO extends ShareDTO{
private String userId;
}
以及模块 B 中的新控制器:
@RestController
@RequestMapping("/share")
public class ShareAdditionalController extends ShareController {
@Override
@PutMapping("/additional")
public void shareAdditional(@RequestBody ShareAdditionalDTO share){
// do something
}
}
已经满足要求了,但是感觉不太优雅:
用户可以访问共享和共享/附加服务,但共享服务实际上已经过时了。现在,我们只需要保留共享/附加服务即可。或者,共享/附加服务不应存在;用户应该仍然可以访问共享服务,但可以选择包含额外的 userId 参数。
那么我怎样才能优雅地做到这一点,尤其是在 Swagger 中,我只想显示一项处于活动状态的服务。 预先感谢
预计 ShareAdditionalController 还提供
/share
的映射,因为您正在扩展 ShareController,因此它也是 /share
的映射。也许您只想在 ShareADditionalController 中实现 ShareAPI 接口?