Summer Project

/ Netty / 没有评论 / 39浏览

Summer是一个用于学习交流,基于Netty4.x的简单mvc库

使用

public class Application {

    public static void main(String[] args) {
        Summer.me()
                .before("/example/*", (request, response) -> {
                    log.debug("path: {}", request.path());
                    // pass
                    return true;
                })
                .get("/example", (request, response) -> response.json(Result.of("summer *_*!!!")))
                .get("/example/:id", (request, response) -> response.text(request.paths().get("id")))
                .post("/example/:id", (request, response) -> response.text(request.paths().get("id")))
                .put("/example/:id", (request, response) -> response.text(request.paths().get("id")))
                .delete("/example/:id", (request, response) -> response.text(request.paths().get("id")))
                .listen(9000)
                .serve();
    }

}
public class Application {

    public static void main(String[] args) {
        ExampleController controller = new ExampleController();

        // 获取一个summer实例
        Summer summer = Summer.me();

        Router router = summer.router();

        // 自定义notFound处理
        router.notFound((request, response) -> response.text("404"));

        // 自定义错误处理
        router.failureHandler((request, response, t) -> response.text("500"));

        // 注册路由
        router.get("/example/text", controller::text);
        router.get("/example/json", controller::json);

        // http服务监听9000端口,并启动服务
        summer.listen(9000).serve();
    }

}

关于

Request

命名参数

显然,:name就是一个命名参数,可以通过request.paths().get("name")方法获取命名参数。

模式匹配: /user/:name

/user/zhangsan             匹配
/user/lisi                 匹配
/user/wangwu/zhaoliu       不匹配
/user/                     不匹配

注意: :name name 必须为字母[a-zA-Z], 否则视为精确匹配!

前置钩子

Ant风格:

请求体

request.body()方法支持下列Content-Type:

对于application/json请求头, 使用request.json()方法即可。

文件上传

拿到FileUpload对象,操作文件。

Response

写响应

Content-Type(text/plainapplication/json)分别会被添加到响应头。

文件下载

使用下面的方法:

重定向

response.redirect(targetUrl)将会设置http状态码为302,并添加Location到响应头。

静态资源

Summers.summer()
        // 静态资源
        .staticFile("/static", "/developer/Code/summer")
        .listen(9000)
        .serve();

例如,http://ip:9000/static/some.txt将会被映射为本地文件路径/developer/Code/summer/some.txt

例子

这里

特别感谢