2.2 注册路由

现代 Web 应用的 URL 十分优雅,易于人们辨识记忆。
在 Blade 中, 路由是一个 HTTP 方法配对一个 URL 匹配模型, 每一个路由可以对应一个处理方法。

如何管理呢?Blade 从以下三个方面对资源进行定义:

  1. 直观简短的资源地址:URI,比如:http://example.com/resources。
  2. 可传输的资源:Web 服务接受与返回的互联网媒体类型,比如:JSON,XML 等。
  3. 对资源的操作:Web 服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

Blade1x 的时候注册一个路由的方式非常多,但后来发现更多的API不代表就会有更多人使用,在 2.0 的版本中我们只保留了那些最核心的,使用最频繁的API,当然随着使用者的增多我们还会继续优化,目前我们保留了2种注册路由的方式:

  1. 通过Blade对象直接注册
  2. 编写控制器一次注册多个(像SpringMvc那样)

废话少说,带大家写几个路由感受一下

  1. Blade blade = Blade.me();
  2. blade.get("/hello", (request, response) -> response.html("<h1>Fuck Blade!</h1>"));
  3. blade.post("/save", (request, response) -> response.json(request.parameters()));

上面的写法看起来是很简洁的,也用到java8的语法,但是一般我们编写一个站点的时候会有很多的路由,都放在一个文件中不是很好管理,这时候Blade支持你以SpringMvc的编程习惯切换过来,我们可以编写一个控制器,在你的 Application 所在目录之下,我们最好将它放在 controller 包中,看到名字也就知道是控制器了。

  1. @Path
  2. public class IndexControoler{
  3. @GetRoute("hello")
  4. public void hello(Request request, Response response){
  5. System.out.println(request.query("name").orElse("默认值"));
  6. response.text(request.query("name").orElse("默认值"));
  7. }
  8. @GetRoute("index")
  9. public String index(){
  10. return "index.html";
  11. }
  12. }

前面我们注册了2个路由,分别讲一下,在路由中包含这么几个东西:

  • 访问路径
  • 请求方法
  • 具体执行的方法体

所谓访问路径就是我们前面使用 Blade 对象进行路由配置的第一个参数,Blade 提供了四种请求方式:GET, POST,PUT,DELETE

使用Blade对象注册的时候有2个参数,第一个是路由的访问路径,后面的参数是一个@FunctionalInterface,这个技术是在java8种出现的,实际上是一个接口(在其他语言中可能叫匿名函数),java8种规定了加@FunctionalInterface注解的接口只有一个方法,这样我们在使用的时候可以用 lambda 表达式,让代码看起来更加简洁。接口有2个参数,分别是 RequestResponse 对象,具体的操作可以在核心概念章节中看到,比 ServletAPI 提供的更加方便和简单,例子中我们只输出了 htmljson

常用注解

  • @Path : 标注一个类是控制器类,可用于类上
  • @Route : 标注一个路由请求
  • @GetRoute : 标注一个 GET 请求
  • @PostRoute : 标注一个 POST 请求
  • @PutRoute : 标注一个 PUT 请求
  • @DeleteRoute : 标注一个 DELETE 请求
  • @JSON : 标注该方法返回值是一段 JSON,框架会自动将返回值解析为JSON输出