JFinal用Restful拦截器后响应的界面是404

Anterior 发布于 2012/12/26 11:21
阅读 3K+
收藏 2

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

JFinal:)我遇到的问题还是用了Restful拦截器后做如下请求
http://localhost:8080/dc/user/123出现的是404,控制台中显示的信息是


JFinal action report -------- 2012-12-26 11:16:47 ------------------------------
Controller  : my.dc.controller.HelloController.(HelloController.java:1)
Method      : show
UrlPara     : 123
Interceptor : com.jfinal.ext.interceptor.Restful.(Restful.java:1)
--------------------------------------------------------------------------------
十二月 26, 2012 11:16:47 上午 com.jfinal.core.ActionHandler warn
警告: Resource not found: /user/show/123
不知到该如何解决了。。。还望指点

加载中
0
JFinal
JFinal
今天下午发布的新版本解决了此问题 :)
Anterior
Anterior
谢谢O(∩_∩)O~
0
JFinal
JFinal

    JFinal 的 Restful 遵守标准约定。按照标准来就可以了,具体约定可以看看 Restful.java 源码注释里面有说明。

    开发者可能出错的地方是请求的method没有对应在上,除了 URL 要对上以外,POST、GET、DELETE、PUT也必须与规则相一致。

    下面贴出具体对应关系:

GET		/user			--->	index
GET		/user/id		--->	show  
GET		/user/add		--->	add
POST	/user			--->	save	
GET		/user/edit/id	--->	edit
PUT		/user/id		--->	update
DELECT	/user/id		--->	delete


0
abcijkxyz
abcijkxyz
有些的浏览器会把出现 ad 的uri当成广告拦截
0
abcijkxyz
abcijkxyz
最好不要用 add
0
Anterior
Anterior

引用来自“JFinal”的答案

    JFinal 的 Restful 遵守标准约定。按照标准来就可以了,具体约定可以看看 Restful.java 源码注释里面有说明。

    开发者可能出错的地方是请求的method没有对应在上,除了 URL 要对上以外,POST、GET、DELETE、PUT也必须与规则相一致。

    下面贴出具体对应关系:

GET		/user			--->	index
GET		/user/id		--->	show  
GET		/user/add		--->	add
POST	/user			--->	save	
GET		/user/edit/id	--->	edit
PUT		/user/id		--->	update
DELECT	/user/id		--->	delete


我看过源代码了,浏览器地址栏中直接访问的应该是GET方法
/user/id这样对应的也是show()方法,只不过渲染时出现的是404,我刚才吧Restful.java中的53行ai.getController().renderError404();注释掉后这个问题解决了;还有一个问题是Restful标准中会根据Accept头返回不同的资源,例如xml、html、jpg……这个在JFinal中我没有找到实现的方法,除了自己去写拦截器或Handler
JFinal
JFinal
回复 @前路 @…… : 谢谢支持 :)
Anterior
Anterior
回复 @JFinal : 好的,我们也在努力,JFinal会更好 :)
JFinal
JFinal
回复 @前路 @…… : 没错,逻辑上没有考虑周全,有好的方案记得写篇博文分享出来 :)
Anterior
Anterior
回复 @JFinal : 谢谢,昨天又和同学一起研究了一下这个问题。貌似是逻辑上出现了错误。你渲染404是为了避免用户直接在浏览器uri请求到action。但是后面判断后执行forwardAction()时是对原来请求uri的改变,也就是用拼接字符串的方式进行的处理,这样forward之后又是通过uri直接访问了,还会渲染404。
JFinal
JFinal
这个拦截器上马比较仓促,可能存在问题,下一版完善一下,有好的建议还请多提出来 :)
0
绝望的八皮
绝望的八皮
之前本来想用的也是404,由于没有时间深究就暂时没用了。。
JFinal
JFinal
回复 @绝望的八皮 : 个人认为jfinal用法更方便灵活。例如可以支持这四个方法以外的方法,如 /account/transfer/123-456-8888,123用户转给456用户888块钱
JFinal
JFinal
回复 @绝望的八皮 : 个人是不提倡这种严格的restful用法的,因为用起来不方便。目前 JFinal 路由的用法是对兼顾了restful风格,但仅仅将method从http请求头中转到url中去了,如 /user/delete/123,原本DELETE这个东东是在请求头中而非url中。
绝望的八皮
绝望的八皮
哈,当时就晚上稍微弄了一下,以为是自己用法不对呢。然后要马上决定用什么方案第二天就培训了,所以就没深究了哈哈
JFinal
JFinal
早提给我的话这一版就不会有这个问题了
0
esrevinu
esrevinu

引用来自“JFinal”的答案

今天下午发布的新版本解决了此问题 :)

我用的1.4版本的jar包,然后刚开始用的controller级的Restful拦截器,后来用的Global级的Restful拦截器,但都是提示[WARN]-[Thread: qtp13729475-23]-[com.jfinal.core.ActionHandler.handle()]: Action not found: /api/6c7ac887d4994dd992f8ecc1bcbbed6f,action不是应该在http请求方法中么,即GET,当然uri里是没有的,这个问题怎么解决呢,多谢解答!!

JFinal
JFinal
请看这里:http://www.oschina.net/question/994899_110103
返回顶部
顶部