2013-10-16 43 views
2

我正在创建一个REST API,其中我将域对象作为JSON实体返回。避免使用@ResponseBody注释所有方法

到目前为止我创建一个控制器中的每一个方法我都标注它像这样:

@RequestMapping(value="/entity/{id}", produces = "application/json; charset=utf-8", method=RequestMethod.GET)  
@ResponseBody 
public String getEntity(@PathVariable Long id) 
{ 
    (...) 
} 

自从我在控制所有的方法都是JSON实体,有没有什么办法来暗示弹簧我想要所有的方法返回@ResponseBody对象? 另外,我必须用produces = "application/json; charset=utf-8"进行注释,因为否则返回的对象的编码错误(并且它们不作为JSON返回)。我是否也可以对所有方法执行此操作,而不必对每个方法进行注释?

回答

1

您可以在类型(类)级别使用@RequestMappingproduces - 对我来说它的工作原理没有问题:

@Controller 
@RequestMapping(value = "/foo", produces = "text/plain; charset=UTF-8") 
public class FooController { ... } 

然而,正如你可以从definition看到,@ResponseBody只能在春季应用于方法级3.x的

编辑: 正如@Prancer指出的,从v4.0开始,Spring supports @ResponseBody on type level

+0

无论如何,这是有帮助的。它像一个魅力:) –

+1

从Spring 4.0版开始,可以将@ResponseBody添加到继承的类型级别,因此不需要在方法级别添加。 – Prancer

+0

@Prancer,谢谢你指出。我相应地更新了我的答案。 –