如何设计Spring Boot服务层适配多项目,支持自定义响应类型?
解决方案:泛型化核心接口
要让不同项目的实现类直接返回各自的响应类型,核心是把原来的固定响应类型接口改成泛型接口,通过泛型参数让每个实现类自定义对应方法的返回类型,彻底避免强制类型转换。
改造核心接口
把MainApplicationServiceInterface定义为带泛型参数的接口,为每个操作的响应类型单独指定泛型:
// 泛型参数分别对应查看、创建、更新操作的响应类型 interface MainApplicationServiceInterface<ViewResp, CreateResp, UpdateResp> { ViewResp viewTicket(TicketViewRequest request); CreateResp createTicket(TicketCreateRequest request); UpdateResp updateTicket(TicketUpdateRequest request); }
项目实现类自定义响应类型
每个项目在实现接口时,直接传入自己的响应类型,实现方法里可以直接返回对应类型的对象:
项目A的实现
// 项目A的专属响应类,可完全自定义结构 class ProjectATicketViewResponse {} class ProjectATicketCreateResponse {} class ProjectATicketUpdateResponse {} class ProjectAService implements MainApplicationServiceInterface<ProjectATicketViewResponse, ProjectATicketCreateResponse, ProjectATicketUpdateResponse> { @Override public ProjectATicketViewResponse viewTicket(TicketViewRequest request) { // 处理项目A的查看逻辑,直接返回专属响应 return new ProjectATicketViewResponse(); } @Override public ProjectATicketCreateResponse createTicket(TicketCreateRequest request) { return new ProjectATicketCreateResponse(); } @Override public ProjectATicketUpdateResponse updateTicket(TicketUpdateRequest request) { return new ProjectATicketUpdateResponse(); } }
项目B的实现
// 项目B的专属响应类,结构可与A完全不同 class ProjectBTicketViewResponse {} class ProjectBTicketCreateResponse {} class ProjectBTicketUpdateResponse {} class ProjectBService implements MainApplicationServiceInterface<ProjectBTicketViewResponse, ProjectBTicketCreateResponse, ProjectBTicketUpdateResponse> { @Override public ProjectBTicketViewResponse viewTicket(TicketViewRequest request) { return new ProjectBTicketViewResponse(); } // 其他方法同理,返回项目B的专属响应 }
额外优化(可选)
如果各项目的请求参数也有差异,同样可以给接口添加请求类型的泛型参数,进一步适配不同项目的个性化需求:
interface MainApplicationServiceInterface<ViewReq, ViewResp, CreateReq, CreateResp, UpdateReq, UpdateResp> { ViewResp viewTicket(ViewReq request); CreateResp createTicket(CreateReq request); UpdateResp updateTicket(UpdateReq request); }
这样每个项目可以完全自定义请求和响应的结构,同时保证类型安全,不会出现强制转换的问题。
内容的提问来源于stack exchange,提问作者Vaibhav Raj
相关产品推荐
相关产品推荐

