`
tomorrow009
  • 浏览: 46852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

活用SpringMVC+Freemarker实现http内容协商

阅读更多

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. 你可以进一步使用内容协商,来处理多语言,字符编码等问题。

 

当然也有不爽的,那就是你要写多个模板文件,这或许会让你觉得有点烦,这时候也许生成器是个好选择。

0
0
分享到:
评论

相关推荐

    springmvc_base1

    同时,可能还涉及到内容协商,以适应不同的设备或格式需求。 项目中可能包含以下关键部分: - `web.xml`:部署描述符,配置了DispatcherServlet和Spring MVC的初始化参数。 - `servlet-context.xml`:Spring MVC的...

    springmvc3.0所需jar绿色包

    4. **内容协商**:这个特性允许服务器根据客户端的偏好返回不同的格式,比如 JSON 或 XML,可以通过 `@RequestMapping` 注解的 `produces` 和 `consumes` 属性来指定。 5. **MVC 视图解析**:Spring MVC 3.0 引入了...

    测试springmvc3

    3. **多视图解析器**:Spring MVC 3 提供了对多种视图技术的支持,如 JSP、FreeMarker、Velocity 等,通过 `ViewResolver` 实现了视图解析的灵活性。 4. **内容协商**:此版本引入了内容协商功能,允许服务器根据...

    SpringMVC3.0_Demo

    5. **内容协商**: 允许服务器根据客户端的能力返回不同格式的数据,如JSON、XML等,通过`@RequestMapping`的produces属性实现。 6. **国际化支持**: `MessageSource`接口提供国际化消息管理,使应用能适应不同地区...

    Springmvc项目

    - **内容协商**: 支持多种格式的响应,如 JSON、XML。 4. **CRUD 操作** - **Create**: 创建新记录,通常使用 POST 请求。 - **Read**: 获取记录,GET 请求用于查询。 - **Update**: 更新记录,PUT 请求用于...

    基于springboot的团队管理系统(源码+数据库)108

    基于springboot的团队管理系统:前端 freemarker、jquery,后端 maven、springmvc、spring、mybatis,角色分为管理员、销售主管、普通销售;集成看板、业务机会、我的日报、团队日报等功能于一体的系统。 ## 功能...

Global site tag (gtag.js) - Google Analytics