当前位置: 首页 > 软件库 > Web3 > 区块链 >

Magician-Route

授权协议 MIT
开发语言 Java
所属分类 Web3、 区块链
软件类型 开源软件
地区 不详
投 递 者 戚锦
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Magician-Route 是 Magician 的官方 web 组件,由 Magician-Web 发展而来的新项目,主要是去掉了里面的反射,牺牲了一点易用性,将侧重点放在了性能上,两者的区别主要在于路由和拦截器的创建方式上。

引入依赖

在Magician项目的基础上 添加这个依赖

<dependency>
    <groupId>com.github.yuyenews</groupId>
    <artifactId>Magician-Route</artifactId>
    <version>1.0.0</version>
</dependency>

创建核心Handler

只允许有一个HttpHandler,这个Handler作为分发器,将请求分发给Route

@HttpHandler(path="/")
public class DemoHandler implements HttpBaseHandler {

    @Override
    public void request(MagicianRequest magicianRequest, MagicianResponse response) {
       try{
            // 主要是这句
            MagicianRoute.request(magicianRequest);
        } catch (Exception e){
        }
    }
}

创建路由

这样的类可以创建多个,根据你的需求 将路由分开创建

每个路由内部,如果没有特别的需要 就不需要加try-catch,框架内部做了处理,一旦发生异常,会将异常信息以json的形式响应给客户端

直接返回需要响应的对象,框架会自动转成json并返回给客户端,你也可以采用如下示例中“Magician的原生响应方式” 将数据返回给客户端,具体可以看Magician文档的《响应参数》

@Route
public class DemoRoute implements MagicianInitRoute {


    @Override
    public void initRoute(MagicianRouteCreate routeCreate) {

        routeCreate.get("/demo/getForm", request -> {
            return "{\"msg\":\"hello login\"}";
        });

        // Magician的原生响应方式
        routeCreate.get("/demo/getForm2", request -> {
            request.getResponse().sendJson("{\"msg\":\"hello login\"}");
            return null;
        });

        routeCreate.post("/demo/json", request -> {

            DemoResponseVo demoResponseVo = new DemoResponseVo();
            demoResponseVo.setName("Beerus");

            return demoResponseVo;
        });
    }

}

将参数转化为实体对象

如果你想让实体类顺利的接收到参数,并且让参数验证生效,那么必须做如下步骤, 这种方式 底层是用的反射,如果你无法接受反射的性能,那么可以不用这种方式,选择权在你自己

只转化

routeCreate.get("/demo/getForm", request -> {

    DemoVO demoVO = ConversionUtil.conversion(request, DemoVO.class);

    return "{\"msg\":\"hello login\"}";
});

转化 + 参数验证

如果验证失败,conversionAndVerification 方法会抛出一个异常,这个异常会自动被响应给客户端,不需要开发者处理

routeCreate.get("/demo/getForm", request -> {

    DemoVO demoVO = ConversionUtil.conversionAndVerification(request, DemoVO.class);

    return "{\"msg\":\"hello login\"}";
});

如果你想获取到验证失败的提示信息 自己处理,可以用这种方式

routeCreate.get("/demo/getForm", request -> {

    try {
        DemoVO demoVO = ConversionUtil.conversionAndVerification(request, DemoVO.class);
    } catch(VerificationException e){
        // 这个就是 验证失败的提示信息
        String msg = e.getMessage();
    }
    
    return "{\"msg\":\"hello login\"}";
});

创建拦截器

跟路由一样,这种类也可以创建多个,根据你的需求 分开创建拦截器

第一个参数为拦截规则,全部拦截 配置 * 即可,否则的话,必须以 / 开头

如果拦截器顺利放行的话,返回 SUCCESS 就好了,如果不给通过,那么直接返回 错误提示信息(返回对象会自定转成 json)

@Interceptor
public class DemoInter implements MagicianInitInterceptor {

    @Override
    public void initInterceptor(MagicianInterceptorCreate interceptorCreate) {

        interceptorCreate.addInterceptor("/demo/*", new MagicianInterceptor() {
            @Override
            public Object before(MagicianRequest magicianRequest) {
                System.out.println("进入了拦截器");
                return SUCCESS;
            }

            @Override
            public Object after(MagicianRequest magicianRequest, Object o) {
                return SUCCESS;
            }
        });

        interceptorCreate.addInterceptor("/*/form", new MagicianInterceptor() {
            @Override
            public Object before(MagicianRequest magicianRequest) {
                System.out.println("进入了拦截器2");
                return SUCCESS;
            }

            @Override
            public Object after(MagicianRequest magicianRequest, Object o) {
                return SUCCESS;
            }
        });
    }

}

 

 相关资料
  • Magician 是一个基于Netty开发的小型 HTTP服务包,可以非常方便的启动一个http服务,同时也支持WebSocket,注解式Handler配置 运行环境 JDK8+ 文档 https://magician-io.com 示例 导入依赖 <dependency> <groupId>com.github.yuyenews</groupId> <artifactId>Magic

  • Magician-JDBC 是Magician的官方JDBC组件,支持多数据源,无sql单表操作,复杂操作可以写sql,事务管理等 文档 https://magician-io.com 示例 导入依赖 <dependency> <groupId>com.github.yuyenews</groupId> <artifactId>Magician-JDBC</artifactId>

  • Magician-Containers 是 Magician 的官方组件,一个容器管理模块,可以对项目中的bean进行统一管理,它带来了两个扩展:AOP 和定时任务。 文档 https://magician-io.com 示例 导入依赖 <!-- This is the jar package build by this project --><dependency> <groupId>co

  • Magician-Scanning 是一个用 Java 开发的扫描区块链的工具包,当我们在程序中需要一些功能时,它可以派上用场,比如说。 当一个地址收到ETH时,程序中的一个方法会被自动触发,这个交易会被传入该方法。 当一个合约的某个功能被调用时(比如ERC20转账),它会自动触发程序中的一个方法,并将这个交易传递给这个方法。它甚至可以只在代币被转移到指定地址时被触发。 当程序需要保留一个区块高度

  • Magician-Web 是Magician的官方 web组件,可以很方便的管理Controller,支持拦截器,会话管理,注解式参数校验,实体类接收参数等 文档 https://magician-io.com 示例 导入依赖 <!-- This is the jar package build by this project --><dependency> <groupId>com.git

  •  Magician-ContractsTools 是一个用于调用智能合约的工具包,你可以非常容易地在Java程序中调用智能合约进行查询和写入操作。 有三个内置的标准合约模板,分别是ERC20、ERC721和ERC1155,如果你需要调用这三个合约中的标准函数,可以帮助你非常快速地完成工作。除了内置的合同模板外,如果你需要调用自定义的合同函数也是很容易的,以后我们还会继续增加标准模板。 此外,还有I