1. 程式人生 > >springMVC對於Controller返回值的可選類型

springMVC對於Controller返回值的可選類型

產生 excel xtend 字符串表 聲明 esp hello print stp

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(
"xxx", "xxx"); return modelAndView; }
View Code

  對於ModelAndView構造函數可以指定返回頁面的名稱,也可以通過setViewName方法來設置所需要跳轉的頁面;

技術分享圖片
@RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("xxx", "xxx");
        modelAndView.setViewName(
"/user/index"); return modelAndView; }
View Code

  返回的是一個包含模型和視圖的ModelAndView對象;

  關於ModelAndView的詳細介紹請見:http://www.cnblogs.com/javahr/p/8267460.html

二、Model:一個模型對象,主要包含spring封裝好的model和modelMap,以及java.util.Map,當沒有視圖返回的時候視圖名稱將由requestToViewNameTranslator決定;

三、ModelMap

待續

四、Map

技術分享圖片
@RequestMapping("/demo2/show") 
    
public 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 Code

  響應的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返回值的可選類型