@RestController註解和@Controller註解的區別
在學習的過程中發現這個問題,寫篇部落格記錄一下,方便以後查閱。
@RestController註解是@Controller和@ResponseBody註解的結合。
首先說明:
@Controller註解表明這是一個控制器類
在方法上加註解@ResquestMapping(value = "url", method = RequestMethod.POST)表示攔截以post請求的傳送的url地址,如果不寫method預設的話會攔截get和post請求
配合InternalResourceViewResolver檢視解析器即可以返回頁面如:return main跳轉到mina.jsp
而不跳轉頁面,僅需返回JSON資料的話,可配合@ResponseBody註解。
相同的加@RestController註解也表明這是一個控制器類,與上面相同
在方法上加註解@ResquestMapping(value = "url", method = RequestMethod.POST)表示攔截以post請求的傳送的url地址,如果不寫method預設的話會攔截get和post請求
但是返回如return main則顯示的是main而不是跳轉到頁面了,如果要跳轉頁面,這是需要用到ModelAndView,ModelAndView model = new ModelAndView();
呼叫這個類的model.addObject("name",value)方法相當於setAttribute("name",value)方法將value值儲存為名name供前臺取。
呼叫這個類的model.setViewName("jsp/main.jsp")即可跳轉到jsp夾裡的main.jsp頁面了。
完整示例:
@Controller
public class MyController{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
@ResponseBody
public String myMethod(){
return "hello word";
}
}
在位址列輸入localhost:8080/專案名/hello回車,頁面將顯示hello word
@Controller
public class MyController{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ModelAndView myMethod(){
ModelAndView model = new ModelAndView();
model.setViewName("success");
return model;
}
}
在位址列輸入localhost:8080/專案名/hello回車,將跳轉到success頁面@RestController
public class MyController{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String myMethod(){
return "hi";
}
}
在位址列輸入localhost:8080/專案名/hello回車,頁面將顯示hi@RestController
public class MyController{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ModelAndView myMethod(){
ModelAndView model = new ModelAndView();
model.setViewName("success");
return model;
}
}
在位址列輸入localhost:8080/專案名/hello回車,將跳轉到success頁面