第2章 程序的基本结构 - 2.2 注册路由
现代 Web 应用的 URL 十分优雅,易于人们辨识记忆。
在 Blade 中, 路由是一个 HTTP 方法配对一个 URL 匹配模型, 每一个路由可以对应一个处理方法。
如何管理呢?Blade 从以下三个方面对资源进行定义:
- 直观简短的资源地址:URI,比如:http://example.com/resources。
- 可传输的资源:Web 服务接受与返回的互联网媒体类型,比如:JSON,XML 等。
- 对资源的操作:Web 服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。
在 Blade1x
的时候注册一个路由的方式非常多,但后来发现更多的API不代表就会有更多人使用,在 2.0 的版本中我们只保留了那些最核心的,使用最频繁的API,当然随着使用者的增多我们还会继续优化,目前我们保留了2种注册路由的方式:
- 通过Blade对象直接注册
- 编写控制器一次注册多个(像SpringMvc那样)
废话少说,带大家写几个路由感受一下
Blade blade = Blade.me();
blade.get("/hello", (request, response) -> response.html("<h1>Fuck Blade!</h1>"));
blade.post("/save", (request, response) -> response.json(request.parameters()));
上面的写法看起来是很简洁的,也用到java8的语法,但是一般我们编写一个站点的时候会有很多的路由,都放在一个文件中不是很好管理,这时候Blade支持你以SpringMvc的编程习惯切换过来,我们可以编写一个控制器,在你的 Application
所在目录之下,我们最好将它放在 controller
包中,看到名字也就知道是控制器了。
@Path
public class IndexControoler{
@GetRoute("hello")
public void hello(Request request, Response response){
System.out.println(request.query("name").orElse("默认值"));
response.text(request.query("name").orElse("默认值"));
}
@GetRoute("index")
public String index(){
return "index.html";
}
}
前面我们注册了2个路由,分别讲一下,在路由中包含这么几个东西:
- 访问路径
- 请求方法
- 具体执行的方法体
所谓访问路径就是我们前面使用 Blade
对象进行路由配置的第一个参数,Blade
提供了四种请求方式:GET
, POST
,PUT
,DELETE
。
使用Blade
对象注册的时候有2个参数,第一个是路由的访问路径
,后面的参数是一个@FunctionalInterface
,这个技术是在java8种出现的,实际上是一个接口(在其他语言中可能叫匿名函数),java8种规定了加@FunctionalInterface
注解的接口只有一个方法,这样我们在使用的时候可以用 lambda
表达式,让代码看起来更加简洁。接口有2个参数,分别是 Request
和 Response
对象,具体的操作可以在核心概念章节中看到,比 ServletAPI
提供的更加方便和简单,例子中我们只输出了 html
和 json
。
常用注解
@Path
: 标注一个类是控制器类,可用于类上@Route
: 标注一个路由请求@GetRoute
: 标注一个GET
请求@PostRoute
: 标注一个POST
请求@PutRoute
: 标注一个PUT
请求@DeleteRoute
: 标注一个DELETE
请求@JSON
: 标注该方法返回值是一段JSON
,框架会自动将返回值解析为JSON
输出