2014-09-25 80 views
4

當我使用spring3 @Controller這樣的:如何使用spring4 @RestController返回一個jsp頁面?

@RequestMapping("/userCenter") 

@Controller 
public class LoginCtrl { 
    @RequestMapping("/loginPage") 
    public String login(HttpServletRequest request,HttpServletResponse response,Model model) throws Exception { 
     return "userCenter/loginPage"; 
    } 
} 

這是確定的,我得到瀏覽器中的loginPage.jsp正確的內容。

,但是當我改變@Controller到@RestController

本地主機:8080 // userCenter/loginPage返回一個頁面帶有字符串 「userCenter/loginPage」

所以,我怎麼會用@RestController來像@Controller獲得jsp頁面?

+1

「@ RestController」的具體*點*是你沒有返回視圖。 – chrylis 2014-09-25 10:53:41

+0

'@ RestController'直接在響應正文中返回一個元素,而不是實際的View。改用'@ Controller'。 – SiriusBits 2017-03-07 16:03:19

回答

6

你不應該。 A @RestController並不意味着返回意見。它的意思是返回將直接寫入響應主體的內容。

如果您確實需要,您可以聲明您的方法返回類型爲ViewModelAndView,並返回具有標識視圖名稱的適當對象。

+0

我可以得到downvote的解釋嗎? – 2016-11-17 16:38:11

+1

有人不知道爲什麼春天介紹了'@ RestController' – sura2k 2016-11-17 17:05:58

+0

假設你只想開發Web服務。它不應該返回任何意見。假設您將爲ororid,ios,web或任何消費者公開該服務。任何人都可以僅使用API​​調用來使用該服務。這將是在春季推出@RestController的原因。 – 2017-03-12 14:10:38

0

檢查@RestController的API文檔是否使用@ResponseBody本身進行了註釋,這表示方法返回值應該綁定到Web響應主體。配置的視圖對象永遠不會起作用,所以它不能映射到任何視圖。 我的問題是你爲什麼要使用RestController,它的意思並不是要映射到任何視圖?

4

其實,@ RestController也可以返回查看...

一天後研究和閱讀文檔時,我得到了一個解決方案

讓我與大家分享的解決方案:

首先,設置控制方法的返回類型是「的ModelAndView」

二,設置你的視覺路徑這樣

ModelAndView mav = new ModelAndView("userCenter/loginPage"); 

最後

return mav; 

你會得到正確的JSP頁面視圖內容

+1

是的,你*可以*這樣做,但你不應該這樣做。這裏缺少的是對REST API應該做什麼和不應該做什麼的基本理解。 – IcedDante 2015-01-26 05:45:23

+1

假設你需要在你的rest api上生成pdf,Spring的處理pdf生成的方式是通過視圖,而不是消息轉換器(使用響應體),所以我相信有一些特殊情況需要混合使用。 (是的,其餘的api應該只能使用json或xml,客戶端應該負責使用提供的數據來渲染pdf,但是同樣有一些特殊用例需要服務器生成報告,即使在休息環境)。 – lepi 2015-08-17 21:35:17

+0

檢查「@ RestController」的來源。這只是一個快捷方式(而不是同時擁有「@ Controller」和「@ ResponseBody」),併爲您提供更好的可讀性,僅此而已。 – sura2k 2016-11-17 17:11:35

0

@RestController自動配置爲@ResponseBody每一個身體,這意味着它的目的是寫在輸出的一切,不返回意見。如果你想要返回一個視圖,使用@Controller配置另一個類並相應地返回視圖

相關問題