Skip to content

路由与控制器

声明控制器

@WebController 让 Rain 通过 WebControllerLoader 扫描类。控制器也可以使用 Rain Controller 模块提供的 @Path 设置公共路径。

kotlin
@WebController
@Path("articles")
class ArticleController

声明 Action

注解请求方法
@GetActionGET
@PostActionPOST
@PutActionPUT
@DeleteActionDELETE
@PatchActionPATCH
@GetPostActionGET、POST
@WebAction默认 GET、POST、PUT、DELETE,也可显式指定
kotlin
@GetAction("{id}")
fun detail(id: Long): Article

@WebAction("search", "GET", "POST")
fun search(keyword: String): List<Article>

你也可以在自定义注解上标记 @RequestMethods,创建项目自己的语义化 Action 注解。

参数来源

SmartWeb 提供以下参数注解:

注解来源
@PathVar路径变量
@RequestParam查询或表单参数
@RequestBody请求体
@SessionValueSession
@CookieValueCookie
@ContextValueAction 上下文
@ContextValues在 Action 上声明多个上下文值

未标注参数也会经过参数映射流程。为避免参数名在编译后丢失,建议 Kotlin 项目保持参数元数据,复杂输入使用明确的数据类和参数注解。

返回值

普通对象交给 SmartWeb 渲染流程处理;文件和上传对象有专门的处理逻辑。需要完全控制输出时,可以实现或返回项目支持的 Render 类型。

Controller 过程链

SmartWeb 不把权限、审计和异常映射硬编码进 Action。Rain Controller 提供类 Play Framework 风格的 @Before@After@Catch,并进一步允许把业务注解编译为过程。完整执行顺序、作用域、继承与自定义方式见 Before / After / Catch

WebSocket

在控制器方法上使用 @NewWs("/path") 注册 WsAction。SmartHTTP 和 Undertow 对 WebSocket 能力的支持程度可能不同,部署前应针对所选服务器做集成测试。

基于 Apache License 2.0 发布