NutzCN Logo
精华 NUTZ能不能同一路径 根据参数访问不同的方法 比如架个注解什么的
发布于 2935天前 作者 qq_cd48ca64 2352 次浏览 复制 上一个帖子 下一个帖子
标签:

NUTZ能不能同一路径 根据参数访问不同的方法 比如架个注解什么的
怎么能实现
我想根据 不一样的接口版本号参数 访问不同的方法 但是路径是一样的

14 回复

建议用路径区分

/v1/xxxxx
/v2/xxxxx

@wendal 但是不太想这样 跟径太多了

慢慢你就区分不了是哪个版本的入口方法了。。。

@wendal 我是想 能不能通过 路径 完事 在接口方法上在加个注解 @version("V1")
这种办法 能不能弄

@qq_cd48ca64 能, 思路有几个:

  1. 走aop
  2. 继承/修改MethodInvokeProcessor,执行时选不同的method
  3. 用@UrlMappingBy,按参数选方法

@wendal 想了想,第三点比较靠谱

@wendal 手册上也没有使用方法啊。。 能不能来个例子

先看注解UrlMappingBy和默认实现类UrlMappingImpl

这个注解标注在MainModule

@wendal 我的自己实现一下 public void add(ActionChainMaker maker, ActionInfo ai, NutConfig config) ?
是这样嘛

我建议在默认实现的基础上改

@wendal 让我自己写我也没那实力 谢谢了 我试试 看能搞出来不

没那实力就老老实实用不同路径呗,要不要那是自已挖个坑把自已埋了还爬不出来

@wendal 想到个办法 在add的时候 我取取 ai.getMethod() 上注解的值拼到path上
这样就能对看似想同的路径 生成一个唯一的 path Key
在请求的时候 我通过参数里的 版本号和请求路径在拼装一个path
这样对客户端来说 路径没办 对服务端 又能分辨出唯一路径 关键是还不用改几行代码
这方案行不

你能想通一个方案且可执行,那就是可行咯

顺便提一下我的方案(不一定比你做的方便,只是多个思路给你参考.). UrlMappingImpl的get方法

    public ActionInvoker get(ActionContext ac) {
        RequestPath rp = Mvcs.getRequestPathObject(ac.getRequest()); // 首先,这里得到req
        String path = rp.getPath(); // 这里根据req里面的特定参数/header, 改变path, 例如 if (req.getParams("_version") != null) path += xxx; // 换个路径之类的.
        ac.setSuffix(rp.getSuffix());
        ActionInvoker invoker = root.get(ac, path);
        if (invoker != null) {
            ActionChain chain = invoker.getActionChain(ac);
            if (chain != null) {
                if (log.isDebugEnabled()) {
                    log.debugf("Found mapping for [%s] path=%s : %s",
                               ac.getRequest().getMethod(),
                               path,
                               chain);
                }
                return invoker;
            }
        }
        if (log.isDebugEnabled())
            log.debugf("Search mapping for path=%s : NOT Action match", path);
        return null;
    }

添加回复
请先登陆
回到顶部