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等模版頁(yè)面。在方法上加@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)到模版頁(yè)面。
@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)頁(yè)面,則用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頁(yè)面,或者h(yuǎn)tml,配置的視圖解析器 InternalResourceViewResolver不起作用,返回的內(nèi)容就是Return 里的內(nèi)容。
- 如果需要返回到指定頁(yè)面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定義mediaType內(nèi)容到頁(yè)面,則需要在對(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)文章
Java代碼發(fā)送post請(qǐng)求實(shí)現(xiàn)方式
本文介紹了使用Java發(fā)送POST請(qǐng)求的方法,包括引用工具類、設(shè)置訪問地址、請(qǐng)求頭和json請(qǐng)求體,最后使用工具類發(fā)送請(qǐng)求并返回結(jié)果2026-05-05
Java7到Java17之Switch語句進(jìn)化史示例詳解
這篇文章主要為大家介紹了Java7到Java17之Switch語句進(jìn)化史示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
java -jar設(shè)置添加啟動(dòng)參數(shù)實(shí)現(xiàn)方法
這篇文章主要介紹了java -jar設(shè)置添加啟動(dòng)參數(shù)實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Nacos服務(wù)發(fā)現(xiàn)并發(fā)啟動(dòng)scheduleUpdate定時(shí)任務(wù)的流程分析
這篇文章主要介紹了Nacos服務(wù)發(fā)現(xiàn)并發(fā)啟動(dòng)scheduleUpdate定時(shí)任務(wù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02

