@Controller和@RestController的區別


restcontroller與controller

1. Controller, RestController的共同點

     都是用來表示spring某個類的是否可以接收HTTP請求

2.  Controller, RestController的不同點

     @Controller標識一個Spring類是Spring MVC controller處理器

     @RestController:  @RestController是@Controller和@ResponseBody的結合體,兩個標注合並起來的作用。

假定一個user對象,對象有很多屬性(name,sex,age,birth,address,tel) 

在@controller注解中,返回的是字符串,或者是字符串匹配的模板名稱,即直接渲染視圖,與html頁面配合使用的,
在這種情況下,前后端的配合要求比較高,java后端的代碼要結合html的情況進行渲染,使用model對象(或者modelandview)的數據將填充user視圖中的相關屬性,然后展示到瀏覽器,這個過程也可以稱為渲染; 
java示例代碼如下:

@Controller @RequestMapping(method = RequestMethod.GET, value = "/") public String getuser(Model model) throws IOException { model.addAttribute("name",bob); model.addAttribute("sex",boy); return "user";//user是模板名 }

對應視圖user.jsp中的html代碼:
<html xmlns:th="http://www.thymeleaf.org"> <body> <div> <p>"${name}"</p> <p>"${sex}"</p> </div> </body> </html>

而在@restcontroller中,返回的應該是一個對象,即return一個user對象,這時,在沒有頁面的情況下,也能看到返回的是一個user對象對應的json字符串,而前端的作用是利用返回的json進行解析渲染頁面,java后端的代碼比較自由。 (需要加:<mvc:annotation-driven />)

java端代碼:

@RestController @RequestMapping(method = RequestMethod.GET, value = "/") public User getuser( ) throws IOException { User bob=new User(); bob.setName("bob"); bob.setSex("boy"); return bob; } 

訪問網址得到的是json字符串{“name”:”bob”,”sex”:”boy”},前端頁面只需要處理這個字符串即可。

總結:

1)返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行

2)如果需要返回JSON,XML或自定義mediaType內容到頁面顯示,需要在對應的方法上加上@ResponseBody注解。


免責聲明!

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



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