开发者社区> 问答> 正文

/u/userId/topics 请求path中间带动态参数,用jfinal如何?400报错

/u/userId/topics 请求path中间带动态参数,用jfinal如何实现?? 400 报错

@JFinal 你好,想跟你请教个问题:

最近在学习jfinal ,自己在做一个论坛练练手,遇到个问题:

/u/userId             这个path,我希望跳转到用户的个人中心        (已实现)
/u/userId/topics    这个path,我希望跳转到该用户的发帖列表    (不知道怎么实现)

第2个用jfinal 怎么实现啊
me.add("/u", UserController.class);   路由我是这样加的

请求path中间带动态参数,springmvc好像可以实现这种,
但是用jfinal 如何实现呢?求大神们指导下

展开
收起
爱吃鱼的程序员 2020-06-04 15:18:01 580 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    /**
         * 过滤新闻路径url
         * @param target
         * @param request
         * @param response
         * @param isHandled
         */
        @Override
        public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
            /**
             * "/umectr/loadimg/upload/20140824/43811408815131240.jpg"
             */
            String preffix="";
            String rex="(\\w+)/(\\d{8})/(\\w+)\\.(\\w+)";
            //UME用路由
            if(target.startsWith(preffix_ume)){
                preffix=preffix_ume;
            }else{
                //TODO 系统公共上传下载路由 需要单独提取出来
                preffix=preffix_updown;
            }
            rex=preffix+rex;
            Pattern pattern = Pattern.compile(rex);
            Matcher matcher = pattern.matcher(target);
            UmeditorHandlerFileUrl iu=new UmeditorHandlerFileUrl();
            boolean status=matcher.find();
            if(status){
                iu.setBiaozhi(matcher.group(1));//标志
                iu.setDate(matcher.group(2));//日期
                iu.setFilename(matcher.group(3));//文件名称(不含后缀)
                iu.setSuffix(matcher.group(4));//后缀名 .jpg .abc
            }
            if(status){
                target=makeUrlParam(iu,preffix);
                nextHandler.handle(target, request, response, isHandled);
            }else{
                nextHandler.handle(target, request, response, isHandled);
            }
        }



    ######

    简单的路由规则,我直接添加了一个handler,在handler中对业务相关的url进行二次分发

    ######感觉这是一种折中转换的方式,算是一种间接实现了,我试试看行不行
    ######

    引用来自“铂金蛋蛋”的评论

    /**
         * 过滤新闻路径url
         * @param target
         * @param request
         * @param response
         * @param isHandled
         */
        @Override
        public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
            /**
             * "/umectr/loadimg/upload/20140824/43811408815131240.jpg"
             */
            String preffix="";
            String rex="(\\w+)/(\\d{8})/(\\w+)\\.(\\w+)";
            //UME用路由
            if(target.startsWith(preffix_ume)){
                preffix=preffix_ume;
            }else{
                //TODO 系统公共上传下载路由 需要单独提取出来
                preffix=preffix_updown;
            }
            rex=preffix+rex;
            Pattern pattern = Pattern.compile(rex);
            Matcher matcher = pattern.matcher(target);
            UmeditorHandlerFileUrl iu=new UmeditorHandlerFileUrl();
            boolean status=matcher.find();
            if(status){
                iu.setBiaozhi(matcher.group(1));//标志
                iu.setDate(matcher.group(2));//日期
                iu.setFilename(matcher.group(3));//文件名称(不含后缀)
                iu.setSuffix(matcher.group(4));//后缀名 .jpg .abc
            }
            if(status){
                target=makeUrlParam(iu,preffix);
                nextHandler.handle(target, request, response, isHandled);
            }else{
                nextHandler.handle(target, request, response, isHandled);
            }
        }



    恩,这个方法我已经尝试了,可以实现,是一种解决办法! 顶一个!
    ######回复 @铂金蛋蛋 : 是的,换个角度,其实是一样的!哈哈######其实如果不用handler这种方式,换个设计思路 /u/topics/userId 这样的纬度不是也不错么?######

    url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:

    public void topic(int userId) {
      // do something;
    }

       应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。

       参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。

    ######

    引用来自“JFinal”的评论

    url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:

    public void topic(int userId) {
      // do something;
    }

       应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。

       参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。

    恩,波总说的有道理,自然就是美!
    2020-06-04 16:21:57
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载