springMVC對於Controller返回值的可選類型
2018-01-11
對於springMVC處理方法支持支持一系列的返回方式:
(1)ModelAndView
(2)Model
(3)ModelMap
(4)Map
(5)View
(6)String
(7)Void
一、ModelAndView:一個包含模型和視圖的ModelAndView 對象。
@RequestMapping(method=RequestMethod.GET) public ModelAndView index(){ ModelAndView modelAndView = new ModelAndView("/user/index"); modelAndView.addObject(View Code"xxx", "xxx"); return modelAndView; }
對於ModelAndView構造函數可以指定返回頁面的名稱,也可以通過setViewName方法來設置所需要跳轉的頁面;
@RequestMapping(method=RequestMethod.GET) public ModelAndView index(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("xxx", "xxx"); modelAndView.setViewName(View Code"/user/index"); return modelAndView; }
返回的是一個包含模型和視圖的ModelAndView對象;
關於ModelAndView的詳細介紹請見:http://www.cnblogs.com/javahr/p/8267460.html
二、Model:一個模型對象,主要包含spring封裝好的model和modelMap,以及java.util.Map,當沒有視圖返回的時候視圖名稱將由requestToViewNameTranslator決定;
三、ModelMap
待續
四、Map
@RequestMapping("/demo2/show")View Codepublic Map<String, String> getMap() { Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value-1"); map.put("key2", "value-2"); return map; }
響應的view應該也是該請求的view。等同於void返回。
在jsp頁面中可直通過${key1}獲得到值, map.put()相當於request.setAttribute方法。
五、View
這個時候如果在渲染頁面的過程中模型的話,就會給處理器方法定義一個模型參數,然後在方法體裏面往模型中添加值。
可以返回pdf excel等,暫時沒詳細了解。
六、String
對於String的返回類型,筆者是配合Model來使用的。
@RequestMapping(method = RequestMethod.GET) public String index(Model model) { String retVal = "user/index"; List<User> users = userService.getUsers(); model.addAttribute("users", users); return retVal; }View Code
指定返回的視圖頁面名稱,結合設置的返回地址路徑加上頁面名稱後綴即可訪問到。
註意:如果方法聲明了註解@ResponseBody ,則會直接將返回值輸出到頁面。
@RequestMapping(value="/showdog") public String hello1(){ return "hello"; }View Code
@RequestMapping(value="/print") @ResponseBody public String print(){ String message = "Hello World, Spring MVC!"; return message; }View Code
或者通過配合@ResponseBody來將內容或者對象作為HTTP響應正文返回(適合做即時校驗);
@RequestMapping(value = "/valid", method = RequestMethod.GET) public @ResponseBody String valid(@RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "logName") String strLogName) { return String.valueOf(!userService.isLogNameExist(strLogName, userId)); }View Code
關於String.valueOf()方法的使用請見:http://www.cnblogs.com/javahr/p/8267717.html
返回字符串表示一個視圖名稱,這個時候如果需要在渲染視圖的過程中需要模型的話,就可以給處理器添加一個模型參數,然後在方法體往模型添加值就可以了。
如果返回的是對象則會產生一個默認的視圖,然後將返回的對象直接解析成JSON,默認視圖+JSON生成正文返回。
七、void
當返回類型為void的時候,則
@Controller @RequestMapping(value="/type") public class TypeController extends AbstractBaseController{ @RequestMapping(method=RequestMethod.GET) public void index(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("xxx", "xxx"); } }View Code
返回的結果頁面還是:/type
這個時候我們一般是將返回結果寫在了HttpServletResponse 中了,如果沒寫的話,spring就會利用RequestToViewNameTranslator 來返回一個對應的視圖名稱。如果這個時候需要模型的話,處理方法和返回字符串的情況是相同的。
springMVC對於Controller返回值的可選類型