jfinal多级路径映射controller测试无效

jfinal添加多级路径,失败

public void configRoute(Routes me) {
    me.setMappingSuperClass(true);
    me.add("oauth/2.0/token", TokenController.class);

controller代码

import com.jfinal.aop.Inject;
import com.jfinal.core.Controller;
import com.uairobot.tts.client.biaobei.BiaoBeiClient;

public class TokenController extends Controller {

  @Inject
  private BiaoBeiClient biaoBeiClient;

  public void index(String grant_type, String client_id, String client_secret) {
    String accessToken = biaoBeiClient.getAccessToken(client_id, client_secret);
    renderText(accessToken);
  }
}

但是访问是404

image.png

版本是jfinal4.2

评论区

JFinal

2020-01-16 19:00

将映射时的 "oauth/2.0/token" 改为 "oauth/20/token",也就是去掉小数点

然后用一个 Handler 做一下转换,将 String target 参数转换一下即可:
public class MyHandler extends Handler {
public void handle(String target ...) {
if (taget.startsWith("oauth/2.0/token")) {
target = target.replace("oauth/2.0/token", "oauth/20/token");
}
next.handle(...);
}

原因是 jfinal 会将带有小数点的 url 当成是静态资源,不会处理掉

上面的方案是将带小数点的 url 转成了不带小数点的,而 controller 被映射成了不带小数点的

hzh740053757

2020-01-17 09:34

@JFinal ActionHandler 里判断静态文件能不能改成
if(target.lastIndexOf(".")>target.lastIndexOf("/")){
return;
}

JFinal

2020-01-17 16:02

@hzh740053757 ActionHandler 你可以继承一下,然后改掉里头的东西,最后配置一下:
public void configHandler(Handlers me) {
me.setActionHandler(new MyActionHandler());
}

通过上面的方式可以将 jfinal 默认的 ActionHandler 换成自己扩展实现的 MyActionHandler

jfinal 几乎所有的组件都是可以扩展的

李通

2020-01-18 10:43

@JFinal thx,测试通过

热门反馈

扫码入社