Sharecs.net
  • Trang chủ
  • Kho Tài Liệu – Báo Cáo
  • Thủ Thuật
    • Thủ thuật máy tính
      • Windows
      • MacOS
      • Linux
    • Thủ thuật internet
    • Thủ thuật phần mềm
  • Lỗi máy tính
    • Lỗi internet
    • Lỗi windows
    • Lỗi phần mềm
  • Lập Trình
    • Lập Trình Java
    • Lập trình Python
    • Lập Trình React Native
    • Code Hay
  • Linh Tinh
    • PhotoShop
    • Tải Video Wallpaper
    • Kho Tools
      • Cân Bằng Phương Trình Hóa Học
      • Custom Css Scrollbar – Render Code
      • Tạo Kí Tự Đặc Biệt Online
      • Tạo Deep Link
    • Tài Liệu – Luận Văn – Báo Cáo
    • Kho Theme Website WordPress
    • Phần Mềm
No Result
View All Result
  • Trang chủ
  • Kho Tài Liệu – Báo Cáo
  • Thủ Thuật
    • Thủ thuật máy tính
      • Windows
      • MacOS
      • Linux
    • Thủ thuật internet
    • Thủ thuật phần mềm
  • Lỗi máy tính
    • Lỗi internet
    • Lỗi windows
    • Lỗi phần mềm
  • Lập Trình
    • Lập Trình Java
    • Lập trình Python
    • Lập Trình React Native
    • Code Hay
  • Linh Tinh
    • PhotoShop
    • Tải Video Wallpaper
    • Kho Tools
      • Cân Bằng Phương Trình Hóa Học
      • Custom Css Scrollbar – Render Code
      • Tạo Kí Tự Đặc Biệt Online
      • Tạo Deep Link
    • Tài Liệu – Luận Văn – Báo Cáo
    • Kho Theme Website WordPress
    • Phần Mềm
No Result
View All Result
Sharecs.net
No Result
View All Result
Home Lập Trình Lập Trình Java

Annotations @Controller and @RestController Trong Spring

by Nguyễn Tuấn
05/02/2023

Annotations @Controller and @RestController có ý nghĩa gì? Và sự khác biệt giữa chúng như thế nào? Cùng tìm hiểu cùng Sharecs.net nha.

Mục Lục

  • Annotations @Controller là gì?
  • Annotations @RestController là gì?

Annotations @Controller là gì?

@Controller đã được giới thiệu trong bản Spring 2.5 với web controller theo kiến trúc MVC. Tiếp sau đó trong Spring 3.0 đã giới thiệu @ResponseBody để trả lại kiểu trả về của phương thức trực tiếp vào nội dung phản hồi HTTP. Chúng ta có thể kết hợp cả hai @Controller và @ResponseBody để nhanh chóng tạo các dịch vụ web RESTful.

Ví dụ:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

  @RequestMapping(value="/hello1", method= RequestMethod.GET)
  @ResponseBody
  String hello1() {
      return "Hello World 1";
  }

  @RequestMapping(value="/hello2", method= RequestMethod.GET)
  @ResponseBody
  String hello2() {
      return "Hello World 2";
  }

  @RequestMapping(value="/hello3", method= RequestMethod.GET)
  @ResponseBody
  String hello3() {
      return "Hello World 3";
  }

}

Trong @Controller có gì ?

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(annotation = Component.class)
String value() default "";
}

Mình sẽ giải thích từng annotation một:

  • @Target(ElementType.TYPE) : annotation này chỉ áp dụng cho khai báo kiểu ví dụ class, interface, record, không áp dụng cho phương thức.
  • @Retention(RetentionPolicy.RUNTIME) : annotation này chỉ có hiệu lực khi ứng dụng chạy, không có hiệu lực khi code, test, hay build ! ( @Retention được sử dụng để chỉ định annotation được sử dụng ở mức độ nào)
    • RetentionPolicy.SOURCE : tham chiếu đến mã nguồn, bị loại bỏ trong quá trình biên dịch. Nó sẽ không có sẵn trong lớp được biên dịch.
    • RetentionPolicy.CLASS : tham chiếu tới tập tin .class, ó sẵn cho trình biên dịch java nhưng không cho JVM. Nó được bao gồm trong tập tin .class.
    • RetentionPolicy.RUNTIME: tham chiếu tới thời gian chạy, sẵn có cho trình biên dịch java và JVM.
  • @Documented : đảm bảo chắc chắn rằng annotation này sẽ được liệt kê khi tạo văn bản chú thích mã nguồn.
  • @Component : đánh dấu class, interface sẽ trở thành bean component, sẽ được Spring Boot quét (scan) và ghi vào danh sách Application Context. Thông thường các bean component chỉ được khởi tạo 1 lần duy nhất, singleton.

Như vậy các class được annotated bởi @Controller bản chất là một singleton bean component.

Annotations @RestController là gì?

Vì RESTful đang trở nên phổ biến và một class có thể dễ dàng chứa nhiều @ResponseBody phương thức, tạo ra nhiều mã trùng lặp. Vì vậy, Spring 4.0 được giới thiệu @RestController để đơn giản hóa việc tạo các dịch vụ web RESTful.

Xem lại mã nguồn @RestController bản thân nó cũng được chú thích bằng @Controller và @ResponseBody.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

  @AliasFor(annotation = Controller.class)
  String value() default "";

}

Nhìn vào mã nguồn ta thấy @RestController = @Controller + @ResponseBody .

  • @RestController sẽ trả dữ liệu về luôn cho trình duyệt, thay vì có thể phải trả dữ liệu cho View Template Engine sau đó View Template Engine kết hợp template + data để sinh ra mã HTML
  • @RestController là một @Controller chuyên dùng để tạo REST API. Còn @Controller khai báo bean component để hứng và xử lý request rồi trả về response nói chung.

Lưu ý : @RestController không làm gì khác ngoài hoạt động như một phím tắt cho @Controller và @ResponseBody nó giúp nhà phát triển không phải chú thích @ResponseBody trên tất cả các phương thức xử lý RESTful.

Với @RestController, bây giờ chúng ta có thể viết lại @Controller ví dụ trên như thế này:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

  @RequestMapping(value="/hello1", method= RequestMethod.GET)
  String hello1() {
      return "Hello World 1";
  }

  @RequestMapping(value="/hello2", method= RequestMethod.GET)
  String hello2() {
      return "Hello World 2";
  }

  @RequestMapping(value="/hello3", method= RequestMethod.GET)
  String hello3() {
      return "Hello World 3";
  }

}

Lúc này code của chúng ta đã ngắn và đẹp hơn rất nhiều đúng không nào.

5/5 - (2 bình chọn)
Tags: Annotation in javajava
ShareSendTweetShare

Cùng chuyên mục

So sánh If Else và Switch Case

So sánh If Else và Switch Case

21/02/2023
8
Super trong java là gì ?

Super trong java là gì ?

20/02/2023
9
So sánh List và Set trong Java Collections

So sánh List và Set trong Java Collections

18/02/2023
15
So sánh interface và abstract trong java

So sánh interface và abstract trong java

17/02/2023
25
How to Convert String to XML in Java ?

How to Convert String to XML in Java ?

19/01/2023
8
Annotation @PathVariable Trong Spring

Annotation @PathVariable Trong Spring

18/01/2023
5
Load More
Subscribe
Notify of
guest

guest

0 Comments
Inline Feedbacks
View all comments

Tài nguyên

Cân bằng phương trình phản ứng hóa

Tạo deep link

Custom Css Scrollbar – Render Code

Bài Viết Nổi Bật

  • Bài Tập Code Python Đơn Giản Có Lời Giải – Phần 1

    Bài Tập Code Python Đơn Giản Có Lời Giải – Phần 1

    1 shares
    Share 0 Tweet 0
  • Download Video Wallpaper Agatsuma Zenitsu – Anime Kimetsu No Yaiba

    45 shares
    Share 0 Tweet 0
  • Trắc Nghiệm Mạng Máy Tính Phần 3 Có Đáp Án

    0 shares
    Share 0 Tweet 0
  • 500 Câu Trắc Nghiệm Mạng Máy Tính Phần 1 Có Đáp Án

    0 shares
    Share 0 Tweet 0
  • Hướng Dẫn React Native Build apk File

    0 shares
    Share 0 Tweet 0
  • Trending
  • Comments
  • Latest
Download Video Wallpaper Agatsuma Zenitsu – Anime Kimetsu No Yaiba

Download Video Wallpaper Agatsuma Zenitsu – Anime Kimetsu No Yaiba

19/02/2023
Bài Tập Code Python Đơn Giản Có Lời Giải – Phần 1

Bài Tập Code Python Đơn Giản Có Lời Giải – Phần 1

31/08/2020
500 Câu Trắc Nghiệm Mạng Máy Tính Phần 1 Có Đáp Án

500 Câu Trắc Nghiệm Mạng Máy Tính Phần 1 Có Đáp Án

23/08/2021
Hướng dẫn cài đặt React Native trên Windows – Phần 1

Hướng Dẫn React Native Build apk File

14/11/2020
Thư viện đồ họa trong Python – Source Code Bắn Pháo Hoa

Thư viện đồ họa trong Python – Source Code Bắn Pháo Hoa

18/03/2023
Chia sẻ quá trình để xây dựng 1 group Facebook cho newbie

Chia sẻ quá trình để xây dựng 1 group Facebook cho newbie

18/03/2023
Tính tổng – Two Sum Leetcode

Tính tổng – Two Sum Leetcode

14/03/2023
So sánh If Else và Switch Case

So sánh If Else và Switch Case

21/02/2023

Phản hồi gần đây

  • luan trong Thư viện đồ họa trong Python – Vẽ doraemon
  • tuan trong Nhận Diện Chó Mèo Python – Tensorflow – Neural Network – Deep Learning
  • Lê Thị Vân trong Fake Giấy Tờ Xác Minh Doanh Nghiệp Trên Facebook
  • Crom trong Cách Kích Hoạt Key Win 11 Bản Quyền –Active Win 11 – Win 10 Free

Donate

Mời Share’cs ly Cafe 

Liên hệ quảng cáo

Email: Sharecs.net@gmail.com

Hợp tác nội dung: Sharecs rất vinh dự được mời các bạn đóng góp những sản phẩm thiết kế, thủ thuật hay những chia sẻ hữu ích… để cùng chia sẻ rộng rãi tới mọi người!

Giới Thiệu

Sharecs.net là một website/blog cá nhân, chuyên chia sẻ những kiến thức xoay quanh công nghệ như máy tính, internet, phần mềm, lập trình,... Mình hi vọng, Sharecs sẽ mang lại những kiến thức mà bạn chưa từng được học trên ghế nhà trường!

  • Giới Thiệu & Liên Hệ
  • Chính Sách Bảo Mật

CopyRight By Sharecs.net DMCA.com Protection Status

No Result
View All Result
  • Trang chủ
  • Kho Tài Liệu – Báo Cáo
  • Thủ Thuật
    • Thủ thuật máy tính
      • Windows
      • MacOS
      • Linux
    • Thủ thuật internet
    • Thủ thuật phần mềm
  • Lỗi máy tính
    • Lỗi internet
    • Lỗi windows
    • Lỗi phần mềm
  • Lập Trình
    • Lập Trình Java
    • Lập trình Python
    • Lập Trình React Native
    • Code Hay
  • Linh Tinh
    • PhotoShop
    • Tải Video Wallpaper
    • Kho Tools
      • Cân Bằng Phương Trình Hóa Học
      • Custom Css Scrollbar – Render Code
      • Tạo Kí Tự Đặc Biệt Online
      • Tạo Deep Link
    • Tài Liệu – Luận Văn – Báo Cáo
    • Kho Theme Website WordPress
    • Phần Mềm

CopyRight By Sharecs.net DMCA.com Protection Status