十、注解路由

    一、注解概述

    • 路由注解 注解点: 类 、 方法 path/value: 路由的锚点 method: http请求的方法类型 singleton: true: 单例模式的路由,每次都会使用路由注册时的实例, false: 每次都会创建新的实例用于路由处理。
    • @Head 请求头注解 注解点: 方法的参数 name: 提取请求头的的名称

    • @Cookie Cookie 注解 方法的参数 name: 提取 Cookie 参数的名称

    • @Body 请求报文注解 注解点: 方法的参数

    二、使用说明

    • 参数注解 @Param(String value)

      • 将指定名称 HTTP 请求参数注入到被注解的方法的入参上。
    • 参数注解 @Cookie(String value)

      • 将指定名称 HTTP 请求Cookie注入到被注解的方法的入参上。
    1. 这样请求Cookie中的名为`_gz`的参数会被注入到aa上。
    • 参数注解 @Head(String value)

      • 将指定名称 HTTP 请求头注入到被注解的方法的入参上。
      • 将指定名称 HTTP 请求的报文内容注入到被注解的方法的入参上,也就是 Http 请求的 body 段内容, 一般应用在 POST 请求上。
    1. ```public String body(@Body String aa)```
    • 自动参数注入

      • 请求相关对象的自动注入

        • 如果被@page注解的方法的参数有:HttpRequest, HttpResponse, HttpSession 三种类型的参数,则框架会自动注入当前请求对应的对象到方法的入参上。
    • 请求参数的自动注入

      • 如果被@page注解的方法中的参数没有指定任何参数注解,则会按照请求参数的顺序,将参数注入到方法的入参上, 但只限于路径参数 或者 以数字方式命名的参数。
    1. 这样请求参数中的名为`1`的参数会被注入到aa上,同样参数中的名为`2`的参数会被注入到bb上。
      • 所有 Java 基本类型的转换都是原型转换,例如:字符串:“123”,可以被转换为整形:123。
        • 支持 double, float, integer, boolean, long, short, Character。
      • 支持集合类型的转换 Collection、Map,同时如果指定了范型,请求中对应参数会按照范型约束为原型转换成指定的对象。
      • 支持自定义对象的转换,会将请求中参数的字符串按照 JSON 的形式转换成指定对象。
      • 如果转换失败会抛出异常。
    • 路由响应的使用

      • 使用 HttpResponse 类中的 write 方法,可以向响应中添加内容, 但后一次添加的内容会覆盖前一次添加的内容。
      • 使用 Router 注解的方法的返回值会自动添加到响应中。
        • 返回值如果是 String 类型则直接添加到响应中。
        • 返回值如果是 byte[] 类型则直接添加到响应中。
        • 返回值如果是 自定义的对象 则会转换成 JSON 形式添加到响应中。