Spring MVC中返回JSON資料的幾種方式
阿新 • • 發佈:2019-01-05
我們都知道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);