【Spark】sparkjava微服务入门(二)—— Router

webserver的router基本都是差不多的

Spark的router是通过三个简单的部分组成的

  • verb (get, post, put, delete, head, trace, connect, options)
  • path (/hello, /users/:name)
  • callback (request, response) -> { }

目录

1. 基础函数 

2. params()函数

3. splat() 函数

4. unmap()模式

5. path()函数

6. Filters 



1. 基础函数 

 基本的函数如下

get("/", (request, response) -> {
    // Show something
});

post("/", (request, response) -> {
    // Create something
});

put("/", (request, response) -> {
    // Update something
});

delete("/", (request, response) -> {
    // Annihilate something
});

options("/", (request, response) -> {
    // Appease something
});

 

2. params()函数

与此同时,Route模式也是可以携带参数的,通过使用 params() 函数获取 URL 中的参数

// matches "GET /hello/foo" and "GET /hello/bar"
// request.params(":name") is 'foo' or 'bar'
get("/hello/:name", (request, response) -> {
    return "Hello: " + request.params(":name");
});

3. splat() 函数

Route 模式也支持从request的url中获取相应的值,就是直接获取url对应的参数,而参数是通过使用 splat() 函数实现的

// matches "GET /say/hello/to/world"
// request.splat()[0] is 'hello' and request.splat()[1] 'world'
get("/say/*/to/*", (request, response) -> {
    return "Number of splat parameters: " + request.splat().length;
});

 

4. unmap()模式

通过使用unmap模式,可以自动不匹配出现的url

unmap("/hello"); // unmaps all routes with path 'hello'
unmap("/hello", "get"); // unmaps all 'GET' routes with path 'hello'

5. path()函数

当我们在同一个前缀下下有多个分支时,可以采用这个path函数,从而使得整个函数更加精简

path("/api", () -> {
    before("/*", (q, a) -> log.info("Received api call"));
    path("/email", () -> {
        post("/add",       EmailApi.addEmail);
        put("/change",     EmailApi.changeEmail);
        delete("/remove",  EmailApi.deleteEmail);
    });
    path("/username", () -> {
        post("/add",       UserApi.addUsername);
        put("/change",     UserApi.changeUsername);
        delete("/remove",  UserApi.deleteUsername);
    });
});

6. Filters 

个人感觉spark的filter方法写起来是真的十分简便,最主要通过 before 或者 after实现,在可阅读性方面十分之强

(1)Before : 在对应的url访问之前需要做的操作。

before((request, response) -> {});

(2)After: 在对应url 的request被处理完以后,可以通过这个url去读取对应的 response的值

after((request, response) -> {});

(3)afterAfter: 就是在After以后在监听一次,可以看看经过After处理之后的response的值

afterAfter((request, response) -> {
    response.header("foo", "set by afterAfter filter");
});

上面的三种模式可以看出,在spark中支持在请求前的处理,同时也可以去监听请求后的response的处理,可以达到一种闭环操作。

于此同时,还支持选择一种模式,使得只有当请求的路径匹配到该模式时,才会被处理

before("/protected/*", (request, response) -> {
    // ... check if authenticated
    halt(401, "Go Away!");
});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值