1. 程式人生 > >Spring MVC中返回JSON數據的幾種方式

Spring MVC中返回JSON數據的幾種方式

return res set 轉換 public servlet 兩種 dispatch ont

我們都知道Spring MVC 的Controller方法中默認可以返回ModeAndView 和String 類型,返回的這兩種類型數據是被DispatcherServlet拿來給到視圖解析器進行繼續處理返回頁面的,而不是直接返回給客戶端的。有時候我們需要發請求後讓服務端直接返回一些數據,不再經過DispatcherServlet,這個時候通常有兩種方式:

1.使用@ResponseBody註解

  該註解的作用是把方法返回結果轉成json或xml格式並進行返回,不管要返回什麽類型的數據,是String還是一個對象,只要是需要請求後想直接返回Json或xml類型的數據,那麽就都可以使用這個註解。

  註意:這裏@ResponseBody的格式轉換是將class類型如一個javabean,map,list等類型進行轉換,轉換後的結果是一個json對象,如果想返回一個json字符串,那麽就需要自己手動處理成json串的格式,json串也就是一個String,這時@ResponseBody就只起到把這個String返回的作用,示例代碼如下:

@RequestMapping("/jsontest")
@ResponseBody
public List<User> jsonTest(){
//直接返回json串
//String test1 ="{\"name\":\"zhangsan\"}";
//會直接返回這樣一個字符串
//String test2 = "this is test";

//以下會把List類型轉換為[{},{}]這樣的數組形式的json對象返回
User user1 = new User();
user1.setLoginName("zhangsan");
user1.setCompany("dept1");
User user2 = new User();
user2.setLoginName("lisi");
user2.setCompany("dept2");
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
return list;
}
總結:一般@ResponseBody註解會將map,JavaBean 對象,如User自動轉成{"":"","":""}這種json的對象表示形式,會將list轉成[a,b,c]這種json的數組表示形式,而String類型的數據
則會直接原樣輸出。

2.使用response對象返回。

 這種方式就是自己進行數據格式轉換,使用response對象進行返回。
response.setContentType("application/json"); response.getWriter().write(resultString);

Spring MVC中返回JSON數據的幾種方式