/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 如何实现呢?求大神们指导下
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
/**
* 过滤新闻路径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);
}
}
url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:
public void topic(int userId) {
// do something;
}
应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。
参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。
######url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:
public void topic(int userId) {
// do something;
}
应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。
参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。