Kiến thức

Java Spring Boot: phân biệt @Controller, @RestController và @ResponseBody 04 tháng 04, 2022 – 7 lượt xem Spring Boot Java Đầu mục bài viết Bài viết liên quan Khoá học hay

Những người mới làm quen với Java SpringBoot đôi lúc sẽ thắc mắc về @Controller, @RestController@ResponseBody. Bài viết này sẽ phân biệt rõ ràng tính năng của từng chú giải.

@Controller là gì?

Nếu bạn chuyển sang khái niệm của @Controller Bạn sẽ thấy

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

Giảng giải từng chú giải 1:

  • @Target(ElementType.TYPE): Chú giải này chỉ vận dụng cho khai báo kiểu tỉ dụ lớp, giao diện, bản ghi, ko vận dụng cho các phương thức.
  • @Retention(RetentionPolicy.RUNTIME): chú giải này chỉ hợp thức lúc phần mềm đang chạy, chẳng phải lúc viết mã, thí điểm hoặc xây dựng!
  • @Documented: bảo đảm rằng chú giải này sẽ được liệt kê lúc tạo văn bản chú giải mã nguồn.
  • @Component: ghi lại lớp, giao diện sẽ biến thành thành phần bean, sẽ được quét (scan) bởi Spring Boot và ghi vào danh sách Application Context. Thông thường, các thành phần bean chỉ được khởi tạo 1 lần, singleton.

Do đấy, các lớp được chú giải bởi @Controller về căn bản là 1 thành phần hạt đậu đơn.

@RestController = @Controller + @ResponseBody

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

Quan sát mã nguồn, bạn có thể thấy @RestController = @Controller + @ResponseBody. Nó có tức là gì?

  • @RestController sẽ trả lại dữ liệu cho trình duyệt, thay vì có thể phải trả lại dữ liệu cho View Template Engine, sau đấy View Template Engine liên kết mẫu + dữ liệu để tạo mã HTML
  • @RestController Là 1 @Controller dành riêng cho việc tạo các API REST. Còn @Controller khai báo 1 thành phần bean để nhận và xử lý đề xuất và trả về phản hồi khái quát.

@ResponseBody chỉ trả về định dạng JSON?

Theo mặc định, chú giải @ResponseBody sẽ chuyển hướng tất cả các phương thức trong lớp để trả về định dạng application/json. Về căn bản, đây là xếp đặt nhân vật Java thành 1 chuỗi JSON. Bên cạnh đó, nếu bạn muốn trả về 1 định dạng khác, hãy thêm tính chất produce trong chú giải @RequestMapping, @GetMapping

@GetMapping(value = "/xml", produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public Book book_xml() {
return new Book("x111", "Dế Mèn Phiêu Lưu Ký", "Tô Hoài");
}


Thông tin thêm

Java Spring Boot: phân biệt @Controller, @RestController và @ResponseBody
04 tháng 04, 2022 – 7 lượt xem
Spring Boot Java
Đầu mục bài viết
Bài viết liên can
Khoá học hay

#Java #Spring #Boot #phân #biệt #Controller #RestController #và #ResponseBody04 #tháng #lượt #xem #Spring #Boot #Java #Đầu #mục #bài #viếtBài #viết #liên #quanKhoá #học #hay
[rule_3_plain] #Java #Spring #Boot #phân #biệt #Controller #RestController #và #ResponseBody04 #tháng #lượt #xem #Spring #Boot #Java #Đầu #mục #bài #viếtBài #viết #liên #quanKhoá #học #hay
Những bạn nào mới nhập môn Java SpringBoot đôi lúc sẽ thắc mắc về @Controller, @RestController và @ResponseBody. Bài viết này sẽ phân biệt rõ tính năng của từng annotation.@Controller là gì?Nếu bạn jump lớn definition của @Controller bạn sẽ thấy@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(annotation = Component.class)
String value() default “”;
}

Giảng giải từng annotation 1:@Target(ElementType.TYPE): annotation này chỉ vận dụng cho khai báo kiểu tỉ dụ class, interface, record, ko vận dụng cho phương thức.@Retention(RetentionPolicy.RUNTIME): annotation này chỉ có hiệu lực lúc phần mềm chạy, ko có hiệu lực lúc code, test, hay build !@Documented: bảo đảm kiên cố rằng annotation này sẽ được liệt kê lúc tạo văn bản chú giải mã nguồn.@Component: ghi lại class, interface sẽ biến 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 độc nhất vô nhị, singleton.Tương tự các class được annotated bởi @Controller thực chất là 1 singleton bean component.@RestController = @Controller + @ResponseBody@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(annotation = Controller.class)
String value() default “”;
}

Quan sát mã nguồn, bạn có thể thấy @RestController = @Controller + @ResponseBody. Có tức là gì?@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 đấy View Template Engine liên kết template + data để sinh ra mã HTML@RestController là 1 @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 khái quát.Có phải @ResponseBody chỉ trả về định dạng JSON?Mặc định, annotation @ResponseBody sẽ định hướng để tất cả các method trong class sẽ trả về định dạng application/json. Thực chất việc này là marshalling nhân vật Java ra chuỗi JSON. Bên cạnh đó, nếu bạn muốn trả về định dạng khác, hãy thêm tính chất produce trong annotation @RequestMapping, @GetMapping…@GetMapping(value = “/xml”, produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public Book book_xml() {
return new Book(“x111”, “Dế Mèn Phiêu Lưu Ký”, “Tô Hoài”);
}

#Java #Spring #Boot #phân #biệt #Controller #RestController #và #ResponseBody04 #tháng #lượt #xem #Spring #Boot #Java #Đầu #mục #bài #viếtBài #viết #liên #quanKhoá #học #hay
[rule_2_plain] #Java #Spring #Boot #phân #biệt #Controller #RestController #và #ResponseBody04 #tháng #lượt #xem #Spring #Boot #Java #Đầu #mục #bài #viếtBài #viết #liên #quanKhoá #học #hay
[rule_2_plain] #Java #Spring #Boot #phân #biệt #Controller #RestController #và #ResponseBody04 #tháng #lượt #xem #Spring #Boot #Java #Đầu #mục #bài #viếtBài #viết #liên #quanKhoá #học #hay
[rule_3_plain]

#Java #Spring #Boot #phân #biệt #Controller #RestController #và #ResponseBody04 #tháng #lượt #xem #Spring #Boot #Java #Đầu #mục #bài #viếtBài #viết #liên #quanKhoá #học #hay
Những bạn nào mới nhập môn Java SpringBoot đôi lúc sẽ thắc mắc về @Controller, @RestController và @ResponseBody. Bài viết này sẽ phân biệt rõ tính năng của từng annotation.@Controller là gì?Nếu bạn jump lớn definition của @Controller bạn sẽ thấy@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@AliasFor(annotation = Component.class)
String value() default “”;
}

Giảng giải từng annotation 1:@Target(ElementType.TYPE): annotation này chỉ vận dụng cho khai báo kiểu tỉ dụ class, interface, record, ko vận dụng cho phương thức.@Retention(RetentionPolicy.RUNTIME): annotation này chỉ có hiệu lực lúc phần mềm chạy, ko có hiệu lực lúc code, test, hay build !@Documented: bảo đảm kiên cố rằng annotation này sẽ được liệt kê lúc tạo văn bản chú giải mã nguồn.@Component: ghi lại class, interface sẽ biến 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 độc nhất vô nhị, singleton.Tương tự các class được annotated bởi @Controller thực chất là 1 singleton bean component.@RestController = @Controller + @ResponseBody@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(annotation = Controller.class)
String value() default “”;
}

Quan sát mã nguồn, bạn có thể thấy @RestController = @Controller + @ResponseBody. Có tức là gì?@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 đấy View Template Engine liên kết template + data để sinh ra mã HTML@RestController là 1 @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 khái quát.Có phải @ResponseBody chỉ trả về định dạng JSON?Mặc định, annotation @ResponseBody sẽ định hướng để tất cả các method trong class sẽ trả về định dạng application/json. Thực chất việc này là marshalling nhân vật Java ra chuỗi JSON. Bên cạnh đó, nếu bạn muốn trả về định dạng khác, hãy thêm tính chất produce trong annotation @RequestMapping, @GetMapping…@GetMapping(value = “/xml”, produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public Book book_xml() {
return new Book(“x111”, “Dế Mèn Phiêu Lưu Ký”, “Tô Hoài”);
}

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Back to top button