SpringMVC目前应用较广,Freemarker又是优秀的通用模板引擎,两者的结合十分方便。
但既然是通用模板引擎,那么仅仅用来渲染Html页面未免暴殄天物。
如果我们从http request的header取得Accept值,并根据此值来选择不同的模板,渲染之,就能够达到http协议中的内容协商的目的了。
我们只需要一个类似下面的方法(这只是一个粗略实现,未考虑细节),即可以实现此模式。
public ModelAndView getTemplateByAcceptType(HttpServletRequest request,
HttpServletResponse response, String template){
String header_accept = request.getHeader("Accept").split(",")[0];
ModelAndView mv ;
if(header_accept.equalsIgnoreCase("application/json")){
mv = new ModelAndView(template + ".json");
response.setHeader("content-type", "application/json");
}else if(header_accept.equalsIgnoreCase("application/xml")){
mv = new ModelAndView(template + ".xml");
response.setHeader("content-type", "application/xml");
}
else{
mv = new ModelAndView(template + ".html");
response.setHeader("content-type", "text/html");
}
return mv;
}
那么,对应的,我们需要在同一个目录下提供多个模板文件, foo.json.ftl和foo.xml.ftl和foo.html.ftl。
当然SpringMVC本身提供了一个@ResponseBody注释,通过使用 不同的wrapper也能够达到同样的目的,那这样做的好处是什么呢?
1. 你可以使用同一个controller来处理不同的用户请求。
2. 可以不受Java方法返回值类型的限制,这意味着你可以更好的处理错误信息和异常等行为。
3. 你可以有选择的暴露想要返回给客户端的属性, 以及更灵活的处理对象间的嵌套,避免父子对象间的循环引用造成的序列化问题。
4. 你可以进一步使用内容协商,来处理多语言,字符编码等问题。
当然也有不爽的,那就是你要写多个模板文件,这或许会让你觉得有点烦,这时候也许生成器是个好选择。
分享到:
相关推荐
最简单的Maven+SpringMVC+Freemarker入门Demo
maven管理项目+springmvc+spring+hibernate+freemarker 集成框架。其中注解格式清晰,hibernate进行了代码封装,对开发效率有了提高,对异常进行了封装。freemarker也有优化,参考common包下。对日期工具类有各种...
基础框架,可满足开发需要
Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...
本人自己 搭建的 一个maven + springmvc + freemarker 框架,希望对你们 有所帮助。
SpringBoot版本的SpringMVC+Freemarker上传案例,地址是localhost:8888/photo/index进入上传页面,默认是三个文件,自己可以屏蔽两个文件就是单个文件的状态了,首先在电脑的D盘新建一个upload的文件夹,...
springMVC+freemarker详细整合实例,供大家学习,如果下载下来的项目上有一个红色感吧号就把架包重新加一次,架包位于web-info下面的lib文件夹内
整合了springmvc+FreeMarker+shiro的小Demo!
springmvc+freemarker+easyUi 框架技术代码
一个基于SpringMVC+Hibernate+Freemarker 的干净的框架
springMVC+freemarker框架demo,有兴趣的可以下载看看
基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+...
大型商城网站源码springmvc+freemarker+velocity+ibatis,最新最前沿的技术,特别适合二次开发
dubbo+zookeeper+SpringMVC+Spring+Mybatis+Freemarker集成
这是一个完整的springmvc + freemarker的配置,我是用myeclipse8.5配置的,下载下来就可以直接部署运行。
简单基础,带注释的springmvc+freemarker开发登录事例
本人 自己搭的一个 maven+spring+springMvc+mybaits+freemarker 框架,希望对你有用,还有sql脚本。
springmvc+mybatis 和一个简单的freemarker代码生成工具
SpringMVC+mongodb+freemarker+apiToken开源内容管理系统.zip