Spring中Controller和RestController的區(qū)別詳解
Controller和RestController的區(qū)別
1. Controller, RestController的共同點
都是用來表示Spring某個類的是否可以接收HTTP請求。
2. Controller, RestController的不同點
@Controller:標識一個Spring類是Spring MVC controller處理器。@Controller類中的方法可以直接通過返回String跳轉(zhuǎn)到jsp、ftl、html等模版頁面。在方法上加@ResponseBody注解,也可以返回實體對象。
@Controller注解源碼:
package org.springframework.stereotype;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.stereotype.Component;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
String value() default "";
}@RestController:@RestController是@Controller和 @ResponseBody 的結(jié)合體,兩個標注合并起來的作用。@RestController類中的所有方法只能返回String、Object、Json等實體對象,不能跳轉(zhuǎn)到模版頁面。
@RestController注解源碼:
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
String value() default "";
}@RestController中的方法如果想跳轉(zhuǎn)頁面,則用ModelAndView進行封裝,如下:
@RestController
public class UserController {
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String toIndex(){
ModelAndView mv = new ModelAndView("index");
return mv;
}
}綜上:@RestController注解相當于@ResponseBody + @Controller合在一起的作用。
- 如果只是使用@RestController注解Controller,則Controller中的方法無法返回jsp頁面,或者html,配置的視圖解析器 InternalResourceViewResolver不起作用,返回的內(nèi)容就是Return 里的內(nèi)容。
- 如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定義mediaType內(nèi)容到頁面,則需要在對應的方法上加上@ResponseBody注解。
Controller, RestController示例如下:
@Controller
@ResponseBody
public class MyController { }
等價于
@RestController
public class MyRestController { } 到此這篇關于Spring中Controller和RestController的區(qū)別詳解的文章就介紹到這了,更多相關Controller和RestController的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
spring中FactoryBean中的getObject()方法實例解析
這篇文章主要介紹了spring中FactoryBean中的getObject()方法實例解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02
解決IDEA報錯war?exploded?is?not?valid問題
在使用IntelliJ?IDEA時遇到'[projectname]warexploded'無效的問題,可以通過清除項目列表、重新導入項目和配置新的Tomcat來解決,確保在Tomcat配置中,將ApplicationContext修改為僅包含一個'/',這一方法或許能幫助遇到相似問題的開發(fā)者2024-09-09
使用springboot整合websocket實現(xiàn)群聊教程
websocket怎么說呢,就是服務器可以主動向客戶端發(fā)起對話,下面就是springboot整合websocket實現(xiàn)群聊的操作代碼,一起來看一下get新技能吧2021-08-08

