@RestController和@Controller的區別

bug糕手發表於2024-09-19

@RestController@Controller 是Spring框架中用於定義控制器(Controller)的兩個非常重要的註解,它們都用於處理HTTP請求,但它們之間存在一些關鍵的區別。

1.@Controller

  • @Controller 註解是Spring MVC的一部分,用於定義一個控制器類。
  • 當Spring MVC接收到一個請求時,它會根據請求的URL對映到相應的控制器類上。
  • @Controller 註解的類中的方法返回的是字串(通常是檢視名)或ModelAndView物件,這些返回值會用於渲染檢視(通常是JSP頁面)。
  • @Controller 註解通常與@RequestMapping或它的變體(如@GetMapping, @PostMapping等)一起使用來定義請求處理的方法。
  • 如果你希望將MVC模式中的“控制器”部分與“檢視”部分分離,並且希望由Spring MVC來管理檢視的渲染,那麼你應該使用@Controller

2.@RestController

  • @RestController 是Spring 4引入的一個方便的註解,它實際上是@Controller@ResponseBody的組合註解。
  • 它意味著,當控制器中的方法返回一個物件時,Spring會自動將這個物件轉換為JSON或XML(取決於請求的Accept頭部)並寫入HTTP響應體中。
  • @RestController更適合構建RESTful Web服務,因為它簡化了返回JSON或XML資料的過程。
  • 使用@RestController註解的控制器類中的方法通常會返回一個物件或物件列表,而不是檢視名或ModelAndView物件。
  • @RestController也常與@RequestMapping或它的變體一起使用來定義請求處理的方法。

3.注意

  • 如果你正在構建一個需要渲染檢視的Web應用(如基於JSP的Web應用),那麼你應該使用@Controller
  • 如果你正在構建一個RESTful Web服務,希望直接返回JSON或XML等資料格式,那麼@RestController將是更好的選擇。
  • @RestController簡化了返回資料的過程,因為它自動將返回的物件轉換為JSON或XML,而@Controller則需要額外的步驟來渲染檢視。

上程式碼和效果圖

@Controller註解

點選檢視程式碼
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/init")
    public String init() {
        return "login";
    }
}

image

@RestController註解

點選檢視程式碼
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/init")
    public String init() {
        return "login";
    }
}

image

相關文章