jfinal controller 请求类型的疑问

最近再看springboot的项目

里面有个设计是这样的

@PostMapping

@GetMapping

@PutMapping

等等等。。。。

把请求的类型分类了

而其实在jfinal中一个请求去路由controller的话其实并没有说我需要指定一定要get或者post

我想问的是

1.区分这些请求类型肯定是有好处的,好处是什么

2.如果我只是用post来去做所有请求的类型的话会有什么问题吗

3.jfinal出于什么考虑没有和springboot一样去按照这种类型分类请求的路由

评论区

JFinal

2017-12-13 16:48

1:一开始是为了使用同样的 url 值,通过 GET、POST、PUT、DELETE 去请求不同的 action 方法,例如:
GET localhost/user/1 用于访问 UserController.detail() 方法
PUT localhost/user/1 用于访问 UserController.update() 方法

除了上面的 GET、PUT 这些以外,还有一些 DELETE、HEAD 之类的 对应到更多的 action 方法,但是 http 协议里头并不支持 DELETE 等请求类型,所以请求类型不够用,要完全实现,就需要引入隐藏表单域并用 POST 请求来辅助

上面的用法很鸡肋,所以 spring 在实战中并没有利用这个机制来制定 URL 规则。绝大部分情况仍然是用不同的 url 访问不同的 action,但 spring 已经忘记了来时的路,还在继续用着 GetMapping、PostMapping 这样原先为了别的目的而建立的规则

jfinal 则不同,是直接就跳过那些鸡肋设计,将请求类型动作直接放在 url 中,例如:
localhost/user/delete/1
localhost/user/update/1

此外,还有一个谈不上好处的功能,就是你的 GetMapping 注解过的 action 无法被 POST 请求访问到,仅是一个功能,实际用处从没人提出来过,估计是没有任何好处

2:用 Post 做所有请求,那么网页中的超链接就没法访问到这些 action 方法了,因为浏览器的在点击超链接时发起的是 GET 请求

3:jfinal 通过深入分析 rest 建议的 url 风格,以及 spring 的实践,认定是个鸡肋后,做出的最终设计,简洁、方便、性能高、学习成本低

yjjdick1990

2017-12-13 17:58

@JFinal 谢谢波总,懂了,其实这种请求类型POST还是GET,PUT,DELETE,原先设计的都是为了表明用意是吧?

热门反馈

扫码入社