spring mvc 动态返回问题

lanmingle 发布于 2015/03/20 17:58
阅读 855
收藏 1
请求一下大家的一个问题.
在spring mvc中想动态返回以及渲染,现在是移动互联网时代.单纯做pc已经不行了.


一个需求: 
统一URL根据不同的请求媒体类型返回不同的结果视图,由服务器渲染好,怎么渲染自己实现.
比如url . /user/findAllUsers
手机客户端要求能返回json或者xml或者更多 
pc ajax客户端 要求全部支持 (json/xml/html)
手机浏览器端: 要求返回json或者xml


例子:


一般情况下手机客户端:
/user/findAllUsers?media-type=json
返回: json data


一般情况下的手机浏览器客户端都是ajax.一般处理要求json
/user/findAllUsers?media-type=json
返回: json data


pc ajax客户端一般情况都是json和html
/user/findAllUsers?media-type=html
返回可嵌入的一个用户列表视图


id , name , ...
1 , 名称




pc 静态网页客户端一般情况都是返回静态html
/user/findAllUsers?media-type=html


返回一个用户列表视图


id , name , ...
1 , 名称


我尝试过使用一个参数来实现.
if(mediaType==JSON){
返回json渲染的视图
}else if(.....){ ....}


这样做很笨,很生硬的编码,另外我也尝试过使用spring mvc的configureContentNegotiation 配置,不行.
还有人说过全部返回json.你觉得这样可靠吗?跟本无法解决对爬虫的或者更多视图问题.还有你想下现在一般手机端或者ipad下的网页端都是跳转到另外的
那样开发量大了.后台一般要配合.还有什么的.

加载中
0
CoserSeu
CoserSeu

不太明白你的意思,为什么用if else就生硬了?
定义统一的渲染接口,并以media-type做参数,所有handler都在业务逻辑处理完后,将结果数据以及media-type传给这个渲染接口。不过这个接口的内部实现,理论上还是要用if else来判断需要返回的数据类型,不是吗?


CoserSeu
CoserSeu
回复 @蓝明乐 : 都不满意就别用现成的框架了,个人愚见,尝试一下自己用filter配合strategy模式设计一个简单的策略分配框架,在filter中根据请求参数为servlet分配策略实例,在servlet业务执行中统一调用策略接口执行不同策略。个人感觉这样还是可以的。
lanmingle
lanmingle
本来就是if else .我就是想让他自动调用那代码.
0
朱宏青
朱宏青

之前写过一个框架 可以支持你说的这些东西 并且不需要参数 

你可以不加参数 尝试根据请求的User-Agent类型 来判断请求客户端的类型 从而来做适配

lanmingle
lanmingle
我说额.这两个没啥区别,我上面写的只是一个例子.实际情况下是去这个的.
0
Justic_0111
Justic_0111

引用来自“朱宏青”的评论

之前写过一个框架 可以支持你说的这些东西 并且不需要参数 

你可以不加参数 尝试根据请求的User-Agent类型 来判断请求客户端的类型 从而来做适配

是的,通过user-agent类型来判断,返回不同的请求jsp画面,或者采用bootstrap开放前端,利用其自适应特点
Justic_0111
Justic_0111
回复 @蓝明乐 : 你是指浏览器兼容性问题吗??
lanmingle
lanmingle
bootstrap? 它局限太多了,真正的客户端用不上.
0
Dreampie
Dreampie
只返回json,pc用mvvm框架解析,客户端直接用,目前都这么做
Dreampie
Dreampie
http://iresty.jd-app.com
Dreampie
Dreampie
没有让你一个url啊,也是多个,
lanmingle
lanmingle
对啊.目前很多都是这样做的. 哎我现在就是想不用这样.一个url对应着多个多种视图返回.
0
NotFoundException
NotFoundException
ContentNegotiatingViewResolver 也个为何不行?
NotFoundException
NotFoundException
@蓝明乐 如果你请求的是.json,那就是返回json呀,,.html就返回html页面嘛
lanmingle
lanmingle
局限太多了.如果你返回的json,那么你就无法返回html页面.
0
卧枝会中田
卧枝会中田

楼主,你这个需求是合理的 同一个URL 对应不同的终端或者是不同的请求方式,显示不同的数据 比如返回HTML,JSON,XML

如果我没记错的话 主要是配置@RequestMapping method与headers来区分请求方式和终端来源

具体请查阅SPRING 文档

lanmingle
lanmingle
spring 文档我都看了N次了.就是没有发现有很好的解决方案.
返回顶部
顶部