Spring中Controller和RestController的區(qū)別詳解
Controller和RestController的區(qū)別
1. Controller, RestController的共同點(diǎn)
都是用來表示Spring某個(gè)類的是否可以接收HTTP請(qǐng)求。
2. Controller, RestController的不同點(diǎn)
@Controller:標(biāo)識(shí)一個(gè)Spring類是Spring MVC controller處理器。@Controller類中的方法可以直接通過返回String跳轉(zhuǎn)到j(luò)sp、ftl、html等模版頁面。在方法上加@ResponseBody注解,也可以返回實(shí)體對(duì)象。
@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é)合體,兩個(gè)標(biāo)注合并起來的作用。@RestController類中的所有方法只能返回String、Object、Json等實(shí)體對(duì)象,不能跳轉(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進(jìn)行封裝,如下:
@RestController public class UserController { @RequestMapping(value = "/index",method = RequestMethod.GET) public String toIndex(){ ModelAndView mv = new ModelAndView("index"); return mv; } }
綜上:@RestController注解相當(dāng)于@ResponseBody + @Controller合在一起的作用。
- 如果只是使用@RestController注解Controller,則Controller中的方法無法返回jsp頁面,或者h(yuǎn)tml,配置的視圖解析器 InternalResourceViewResolver不起作用,返回的內(nèi)容就是Return 里的內(nèi)容。
- 如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定義mediaType內(nèi)容到頁面,則需要在對(duì)應(yīng)的方法上加上@ResponseBody注解。
Controller, RestController示例如下:
@Controller @ResponseBody public class MyController { } 等價(jià)于 @RestController public class MyRestController { }
到此這篇關(guān)于Spring中Controller和RestController的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Controller和RestController的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring中@RestController和@Controller的區(qū)別小結(jié)
- Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決
- Spring中@Service注解的作用與@Controller和@RestController之間區(qū)別
- SpringBoot?@RestControllerAdvice注解對(duì)返回值統(tǒng)一封裝的處理方法
- springboot @Controller和@RestController的區(qū)別及應(yīng)用詳解
- Spring Boot項(xiàng)目@RestController使用重定向redirect方式
相關(guān)文章
深入理解SpringBoot中關(guān)于Mybatis使用方法
這篇文章主要介紹了SpringBoot中關(guān)于Mybatis使用方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03spring中FactoryBean中的getObject()方法實(shí)例解析
這篇文章主要介紹了spring中FactoryBean中的getObject()方法實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02解決IDEA報(bào)錯(cuò)war?exploded?is?not?valid問題
在使用IntelliJ?IDEA時(shí)遇到'[projectname]warexploded'無效的問題,可以通過清除項(xiàng)目列表、重新導(dǎo)入項(xiàng)目和配置新的Tomcat來解決,確保在Tomcat配置中,將ApplicationContext修改為僅包含一個(gè)'/',這一方法或許能幫助遇到相似問題的開發(fā)者2024-09-09一文搞懂Java中對(duì)象池的實(shí)現(xiàn)
池化并不是什么新鮮的技術(shù),它更像一種軟件設(shè)計(jì)模式,主要功能是緩存一組已經(jīng)初始化的對(duì)象,以供隨時(shí)可以使用。本文將為大家詳細(xì)講講Java中對(duì)象池的實(shí)現(xiàn),需要的可以參考一下2022-07-07JDK數(shù)組阻塞隊(duì)列源碼深入分析總結(jié)
在這篇文章當(dāng)中,我們將通過源碼仔細(xì)為大家介紹一下JDK具體是如何實(shí)現(xiàn)數(shù)組阻塞隊(duì)列的,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08使用springboot整合websocket實(shí)現(xiàn)群聊教程
websocket怎么說呢,就是服務(wù)器可以主動(dòng)向客戶端發(fā)起對(duì)話,下面就是springboot整合websocket實(shí)現(xiàn)群聊的操作代碼,一起來看一下get新技能吧2021-08-08