2013-10-16 42 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,謝謝你指出。我相應地更新了我的答案。 –