configRoute中如何配置动态路径?

最近在做微信平台方面的开发,微信推送的消息格式如下:

www.abc.com/$APPID$/callback?nonce=xxx

但$APPID$这个值是动态的,那么jfinal中如何配置呢?

评论区

zeroabc

2019-12-25 11:31

https://jfinal.com/doc/2-7

liugz

2019-12-25 11:55

@zeroabc 目前是自己写了handler实现的。

JFinal

2019-12-25 12:49

jfinal 路由不支持这种风格,可以改成下面的几种形式来解决,任选一种:
1:www.abc.com/callback?nonce=xxx&appid=APPID
2:www.abc.com/callback/$APPID$?nonce=xxx

如果这个 url 风格是被强制要求不能改变的,也可以通过一个 handler 来转换去实现你要求的功能,这里只给出一个演示代码,你自己根据具体需求修改一下:
public class CallbackUrlHandler extends Handler {
public void handle(String target , HttpServletRequest req, HttpServletResponse res, boolean[] isHandled) {
if (target.endsWith("/callback")) {
String APPID = target.substring(0, target.indexOf("/callback");
target = "/callback" + APPID;
}
next.handle(target, req, res, isHandled);
}
}

上面代码的主要逻辑就是将 /$APPID$/callback 的形式转化成 /callback/$APPID$ 的形式

在 controller 中通过下面的代码可以获取到 APPID 值:
String appId = getPara();

通过下面的方法可以获取 nonce 值:
String nonce = getPara("nonce");

JFinal

2019-12-25 12:52

jfinal 这么设计路由有很多考虑,比起你需要的那种路由有很多优势。具体原因,以往谈论过很多,就不再重复

没有完美的设计,只有利弊权衡之后的选择

liugz

2019-12-25 13:06

@JFinal 目前是自己写的handler,代码和波总您提供的代码类似。
这个主要是微信有个接口推送过来的格式是这样子,没办法。
我们自己开发程序用jfinal路由问题不大,主要是腾讯弄这种动态的url推送数据,就挺蛋疼

liugz

2019-12-25 13:26

@JFinal 另外再请教下 www.abc.com/callback/$APPID$?nonce=xxx 这种格式,
那configRoute中可以这么配置:me.add("/callback", WeixinMsgController.class) 吗 ?
我测试了无效

JFinal

2019-12-25 13:59

@liugz 路由配置还是原来的配置方法, 在 handler 中的 String target 变量就是 url 中去除掉域名、问号挂参后的剩余部分

通过改变 target 参数,让其可以对应到 controller 的 action 就可以了,对 handler 进行单步调试一下