1. 程式人生 > >@RestController註解和@Controller註解的區別

@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頁面