路由与控制器
声明控制器
@WebController 让 Rain 通过 WebControllerLoader 扫描类。控制器也可以使用 Rain Controller 模块提供的 @Path 设置公共路径。
kotlin
@WebController
@Path("articles")
class ArticleController声明 Action
| 注解 | 请求方法 |
|---|---|
@GetAction | GET |
@PostAction | POST |
@PutAction | PUT |
@DeleteAction | DELETE |
@PatchAction | PATCH |
@GetPostAction | GET、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 | 请求体 |
@SessionValue | Session |
@CookieValue | Cookie |
@ContextValue | Action 上下文 |
@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 能力的支持程度可能不同,部署前应针对所选服务器做集成测试。