其他
一个注解干翻所有Controller
The following article is from geekhalo Author geekhalo
1
概览不需要编写 Controller 代码,将 CommandService 和 QueryService 直接暴露为 Web 接口; 完成与 Swagger 框架的集成,动态生成 api doc,方便前端接入;
2
快速入门<dependency>
<groupId>com.geekhalo.lego</groupId>
<artifactId>lego-starter</artifactId>
<version>0.1.11-rest-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>3.0.0</version>
</dependency>
@Configuration
@EnableSwagger2
public class SpringFoxConfiguration {
}
RequestBody 接入。以 json 作为入参,适用于复杂的参数结构; RequestParam 接入。以 param 作为参数,适用于简单场景;
@CommandServiceDefinition(
domainClass = Order.class,
idClass = Long.class,
repositoryClass = OrderRepository.class)
@AutoRegisterWebController(name = "order")
public interface OrderCommandService{
void cancel(Long orderId);
Long create(CreateOrderCommand command);
void paySuccess(PaySuccessCommand command);
}
@QueryServiceDefinition(domainClass = Order.class,
repositoryClass = OrderQueryRepository.class)
@Validated
@AutoRegisterWebController(name = "order")
public interface OrderQueryService {
OrderDetail getById(@Valid @NotNull(message = "订单号不能为null") Long id);
Page<OrderDetail> pageByUserId(@Valid @NotNull(message = "查询参数不能为 null") PageByUserId query);
List<OrderDetail> getByUserId(@Valid @NotNull(message = "查询参数不能为 null") GetByUserId getByUserId);
Long countByUser(@Valid @NotNull(message = "查询参数不能为 null") CountByUserId countByUserId);
List<OrderDetail> getPaidByUserId(Long id);
}
3
设计&扩展提供统一的Controller,作为所有请求的转发器; 提供插件与 Swagger 进行集成,提供完整的 api doc;
Spring 对所有的 QueryService 进行实例化; 完成实例化的 QueryService Bean 自动注册到 QueryServicesRegistry; QueryMethodRegistry 从 QueryServicesRegistry 中获取服务实例,对 QueryMethod 进行解析,并完成注册;
客户端向服务器发起请求; 服务器将请求 路由到 QueryDispatcherController 的相关方法; QueryDispatcherController 根据 serviceName 和 methodName 从 QueryMethodRegistry 中获取 QueryMethod,执行业务方法,最后返回最终结果;
QueryServicesProvider 从 QueryMethodRegistry 中获取 QueryMethod 信息; 解析 QueryMethod 信息生成 RequestHander,并注册到 Swagger ; 用户请求 Swagger 时,将 RequestHander 转化为 api doc进行返回;
4
项目信息往期推荐