2014-05-11 13 views
2

我正在使用Spring MVC 4,我想知道我在課堂上使用@RestController,並且我正在使用@RequestMapping(headers = "Accept=application/json")。現在任何人都可以告訴我爲什麼只需在我的config-servlet.xml中使用<mvc:annotation-driven />我如何在瀏覽器中獲得JSON的響應。我的意思是使用頭文件屬性只是說這個方法只能迴應具有這種頭文件的請求。 MVC4如何知道在瀏覽器上回復JSON。這裏是我的代碼:在SpringMVC4中使用@RequestMapping(headers =「Accept = application/json」)

我的配置-servlet.xml中

<beans> 
<context:component-scan base-package="com.songs.service.controller" /> 
<mvc:annotation-driven /> 
</beans> 

我RestController類

@RestController 
@RequestMapping("/songappWS") 
public class SongServiceWS 
{ 
@RequestMapping(value = "/topmoviesWS", method = RequestMethod.GET, headers="Accept=application/json") 
public List<?> getTopMoviesWS() { 
//method logic 
return l1; 

} 
} 

回答

2

原因春天在JSON響應是@RestController隱含意味着,處理getTopMoviesWS()方法的響應就好像它有@ResponseBody註釋(已經存在於Spring 3中)。

這意味着Spring將使用Jackson JSON庫(如果存在於類路徑中)將響應轉換爲JSON。

結賬this後。

+0

這是四季如春會自動選擇當'@ ResponseBody'使用'RestController'時存在或默認 – user3626306

+1

在JSON返回,如果傑克遜是在類路徑中,那麼是的,Spring MVC的將返回JSON – geoand

2

由於@RestController,您在JSON中獲得響應,如何?

  1. @RestController本身標註有@Controller@ResponseBody暗示@RequestMapping方法假定 @ResponseBody語義通過default.You可以有更多的信息here

更全面,你的代碼看起來就像這樣:

@RequestMapping(value = "/topmoviesWS", method = RequestMethod.GET, 
    headers="Accept=application/json") 
public @ResponseBody List<?> getTopMoviesWS() { 

    return l1;  
} 
  1. @ResponseBody註解放在getTopMoviesWS()方法告訴Spring MVC的,它並不需要渲染通過服務器 - 響應側視圖層,但是返回的列表是響應主體,應該直接寫入HTTP響應中作爲JSON。 返回的列表必須轉換爲JSON,您不需要手動執行此轉換。由於Jackson 2在類路徑中,因此會自動選擇Spring的MappingJackson2HttpMessageConverter將值轉換爲JSON。 您可以看看here瞭解@ResponseBody機制。
+0

三江源。現在我知道,默認情況下,春季選擇返回JSON – user3626306

+0

不要提及:) 我認爲你應該通過批准答案或寫出正確答案來批准它。 – Centonni

+0

**你能回答這個嗎?** http://stackoverflow.com/questions/23624909/how-to-return-json-from-spring-restful-service-and-access-it-using-resttemplate – user3626306

相關問題