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("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 來返回一個對應的視圖名稱。如果這個時候需要模型的話,處理方法和返回字符串的情況是相同的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM