首页 > 技术文章 > Summer Project

bener 2018-06-12 19:28 原文

Summer Project

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:

  • multipart/form-data
  • application/x-www-form-urlencoded

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

文件上传

  • request.files()
  • request.file(name)

拿到FileUpload对象,操作文件。

Response

写响应

  • response.text(text)
  • response.json(json)

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

文件下载

使用下面的方法:

  • response.sendFile(file)

重定向

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

例子

这里

特别感谢

推荐阅读