我正在创建一个java rest endpoing,并使用Ruby来消费它。
在ruby / rails世界中,使用Active Resource,网址可以是:
/users.json
或
/users.xml
目前我的控制器方法如下:
@ResponseBody
@RequestMapping(value = "/users.json", method = RequestMethod.GET)
public String list(HttpServletRequest request, HttpServletResponse response) {
}
我不想复制此方法以映射到扩展名为.xml的网址。
我能以某种方式做两个网址吗?
我还必须将内容类型设置为json或xml。
我知道另一种方式是spring查看请求标头然后返回json或xml,但似乎我模仿rails如何工作我需要有users.json或users.xml(基于url结构与请求标头相反)。
答案 0 :(得分:1)
是的,这可以通过Spring的ContentNegotiatingViewResolver
来实现。请参阅此博客文章:http://www.mkyong.com/spring-mvc/spring-3-mvc-contentnegotiatingviewresolver-example/
答案 1 :(得分:1)
使用@ResponseBody时,您将绕过ContentNegotiatingViewResolver。
让你的url成为/ users而不是/users.json或/users.xml,并将requestheaders中的Accept标头设置为所需的mediatype,框架将选择适当的messageconverter并为你完成工作。 注意:messageconverter应该出现在类路径中。
希望这有帮助。