您现在的位置是:首页 > 文章详情

Magician-Route 发布啦

日期:2022-11-21点击:228

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

Magician-Web 依然会继续维护,如果大家对反射的性能不是特别抗拒,而且更喜欢Magician-Web的风格,大可放心使用。

创建路由

由注解的形式改成了 传参的形式,每一次的请求都不再需要通过反射来执行了路由了,性能得到了有效提升

  • 这样的类可以创建多个,根据你的需求 将路由分开创建
  • 每个路由内部,如果没有特别的需要 就不需要加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; } }); } }

可以访问官网了解更多:https://magician-io.com

原文链接:https://www.oschina.net/news/218730/magician-route-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章