Chủ đề của Tích hợp ứng dụng trang đơn với Spring Boot - Integrate single page application with Spring Boot

SBA301 - Chương 6: Spring Boot REST — annotation và xử lý request, response

Xây dựng dịch vụ REST bằng Spring Boot: GetMapping và PostMapping để ánh xạ phương thức HTTP, RequestParam cho tham số truy vấn, PathVariable cho biến đường dẫn, RequestHeader cho header tuỳ ý, RequestBody để chuyển thân yêu cầu thành đối tượng Java. Giải thích RestController đã bao hàm ResponseBody cho mọi phương thức, cách ấn định mã trạng thái bằng ResponseStatus, ResponseEntity để tự do đặt thân, mã trạng thái và header, ràng buộc kiểu dữ liệu qua consumes và produces, cùng lựa chọn giữa PUT và PATCH.

Xem danh sách câu hỏi20 câu hỏi100% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

20Câu hỏi hiện có

Câu hỏi của chủ đề

20/20 câuHết danh sách
1Which HTTP header is used to specify the content type of a JSON response?4 lựa chọnDễ100% trả lời đúng
AContent-Language
BContent-Encoding
CContent-Type: application/json
DContent-Length
Lời giải
Để xác định loại nội dung của một phản hồi JSON, bạn cần sử dụng tiêu đề HTTP nào?
Mở trang câu hỏi này →
A@PathVariable
B@RequestParam
C@RequestBody
D@RequestHeader
Lời giải
Trong Spring Boot REST, để ánh xạ cơ thể yêu cầu HTTP đến tham số phương thức, chúng ta sử dụng annotation @RequestBody. Annotation này cho phép chúng ta ánh xạ dữ liệu từ cơ thể yêu cầu HTTP đến một đối tượng Java. Ví dụ, khi chúng ta tạo một phương thức REST để tạo mới một tài nguyên, chúng ta có thể sử dụng @RequestBody để ánh xạ dữ liệu từ cơ thể yêu cầu HTTP đến đối tượng Java mà chúng ta muốn tạo mới. Điều này giúp chúng ta có thể dễ dàng xử lý dữ liệu từ cơ thể yêu cầu HTTP và tạo mới tài nguyên một cách dễ dàng.
Mở trang câu hỏi này →
3When should you use PUT instead of PATCH?4 lựa chọnDễ
AWhen updating only part of a resource
BWhen replacing the entire resource
CWhen deleting a resource
DWhen creating new resource
Lời giải
Khi nào bạn nên sử dụng PUT thay vì PATCH? PUT và PATCH đều được sử dụng để cập nhật dữ liệu, nhưng chúng có cách sử dụng khác nhau. PUT thường được sử dụng khi bạn muốn thay thế toàn bộ tài nguyên, trong khi PATCH được sử dụng khi bạn muốn cập nhật một phần của tài nguyên. Ví dụ, nếu bạn muốn thay thế toàn bộ thông tin về một người dùng, bạn nên sử dụng PUT. Ngược lại, nếu bạn chỉ muốn cập nhật thông tin về địa chỉ email của người dùng, bạn nên sử dụng PATCH. Sử dụng PUT thay vì PATCH khi bạn muốn thay thế toàn bộ tài nguyên.
Mở trang câu hỏi này →
A@RequestBody
B@RequestParam
C@PathVariable
D@RequestHeader
Lời giải

Trong Spring Boot REST, annotation được sử dụng để trích xuất các biến đường dẫn từ URL là @PathVariable. Annotation này cho phép bạn truy cập vào các phần của URL và sử dụng chúng như là các biến trong phương thức của controller. Ví dụ, nếu bạn có một phương thức như sau: @GetMapping("/users/{id}")

Lời giải
public String getUser(@PathVariable Long id) {
    // code here
}

Trong ví dụ trên, @PathVariable được sử dụng để trích xuất giá trị của id từ URL và sử dụng nó như là một biến trong phương thức getUser.

Mở trang câu hỏi này →
5What is the purpose of the @RequestParam annotation?4 lựa chọnDễ100% trả lời đúng
AMaps headers to method parameters
BBinds form data to method parameters
CMaps path variables to fields
DMaps query parameters to method parameters
Lời giải

Annotation @RequestParam được sử dụng trong Spring MVC để ánh xạ các tham số truy vấn (query parameters) trong URL đến các tham số phương thức (method parameters) của một phương thức controller. Điều này cho phép bạn dễ dàng lấy giá trị của các tham số truy vấn và sử dụng chúng trong logic của phương thức. Ví dụ, nếu bạn có một phương thức controller như sau: @GetMapping("/users")

Lời giải
public String getUsers(@RequestParam("name") String name, @RequestParam("age") int age) {
  ...
}

thì @RequestParam("name") và @RequestParam("age") sẽ ánh xạ các tham số truy vấn "name" và "age" trong URL đến các tham số phương thức "name" và "age".

Mở trang câu hỏi này →
6Which Spring annotation is used to map HTTP GET requests to a method?4 lựa chọnTrung bình60% trả lời đúng
A@RequestGet
B@Get
C@HttpGet
D@GetMapping
Lời giải

Để ánh xạ các yêu cầu HTTP GET đến một phương thức, chúng ta sử dụng annotation @GetMapping trong Spring. Annotation này cho phép chúng ta định nghĩa một phương thức có thể được gọi khi nhận được yêu cầu GET từ client. Ví dụ, nếu chúng ta có một phương thức như sau: @GetMapping("/users")

Lời giải
public List<User> getUsers() {
    // logic để lấy danh sách người dùng
}

Thì khi client gửi yêu cầu GET đến đường dẫn /users, phương thức getUsers() sẽ được gọi và trả về danh sách người dùng. Annotation @GetMapping là một trong những annotation quan trọng trong Spring, giúp chúng ta xây dựng các ứng dụng web hiệu quả và dễ dàng quản lý.

Mở trang câu hỏi này →
7How can you specify the response status code in a REST controller?4 lựa chọnDễ100% trả lời đúng
ABy using HttpServletResponse
BYou cannot control the status code
CBy using @ResponseStatus annotation
DBy returning an int
Lời giải
Để chỉ định mã trạng thái phản hồi trong một controller REST, bạn có thể sử dụng một trong các phương pháp sau. Phương pháp đầu tiên là sử dụng HttpServletResponse. Tuy nhiên, phương pháp này không được khuyến khích vì nó yêu cầu bạn phải sử dụng phương thức sendError() để chỉ định mã trạng thái. Phương pháp thứ hai là bạn không thể kiểm soát mã trạng thái. Phương pháp thứ ba là sử dụng @ResponseStatus annotation. Đây là phương pháp được khuyến khích nhất vì nó cho phép bạn dễ dàng chỉ định mã trạng thái cho phương thức controller của mình. Phương pháp thứ tư là bằng cách trả về một giá trị int. Tuy nhiên, phương pháp này cũng không được khuyến khích vì nó có thể gây nhầm lẫn và khó bảo trì.
Mở trang câu hỏi này →
8What is the primary purpose of a RESTful web service in Spring Boot?4 lựa chọnDễ100% trả lời đúng
ATo render HTML content
BTo provide data through JSON or XML over HTTP
CTo connect to a database
DTo secure the application with OAuth2
Lời giải
Mục đích chính của một dịch vụ web RESTful trong Spring Boot là cung cấp dữ liệu thông qua JSON hoặc XML qua HTTP. Dịch vụ web RESTful sử dụng các phương thức HTTP như GET, POST, PUT, DELETE để tương tác với các nguồn dữ liệu. Khi một yêu cầu HTTP được gửi đến dịch vụ web RESTful, nó sẽ xử lý yêu cầu và trả về dữ liệu phù hợp theo định dạng JSON hoặc XML. Điều này cho phép các ứng dụng khác nhau có thể giao tiếp với dịch vụ web RESTful và sử dụng dữ liệu được cung cấp. Ví dụ, một ứng dụng web có thể sử dụng dịch vụ web RESTful để tải xuống dữ liệu từ một cơ sở dữ liệu và hiển thị dữ liệu đó trên trang web.
Mở trang câu hỏi này →
A@RestStatus
B@StatusCode
C@ResponseStatus
D@HttpStatus
Lời giải
Để trả về một trạng thái HTTP cụ thể từ một phương thức, bạn cần sử dụng một trong các chú thích sau. Trong đó, chú thích @ResponseStatus là lựa chọn chính xác.
Mở trang câu hỏi này →
A@PostMapping and @RequestBody
B@GetMapping and @PathVariable
C@PostMapping and @RequestParam
D@PostMapping and @ResponseBody
Lời giải

Để xác định một phương thức xử lý yêu cầu POST và chấp nhận cơ thể yêu cầu, bạn cần sử dụng hai annotation đặc biệt trong Spring MVC. Đầu tiên, bạn cần sử dụng @PostMapping để chỉ định phương thức xử lý yêu cầu POST. Thứ hai, bạn cần sử dụng @RequestBody để chỉ định rằng phương thức này sẽ chấp nhận cơ thể yêu cầu được gửi đi. Điều này cho phép bạn truy cập vào dữ liệu được gửi đi trong cơ thể yêu cầu. Ví dụ, nếu bạn muốn tạo một phương thức xử lý yêu cầu POST để tạo một tài khoản mới, bạn có thể sử dụng @PostMapping và @RequestBody như sau: @PostMapping("/taikhoan")

Lời giải
public ResponseEntity<TaiKhoan> taoTaiKhoan(@RequestBody TaiKhoan taiKhoan) {
    // Xử lý tạo tài khoản
}

Trong ví dụ trên, @PostMapping chỉ định phương thức xử lý yêu cầu POST, và @RequestBody chỉ định rằng phương thức này sẽ chấp nhận cơ thể yêu cầu được gửi đi.

Mở trang câu hỏi này →
11What is the purpose of the @RequestBody annotation?4 lựa chọnDễ100% trả lời đúng
AMaps the request body to a Java object
BBinds a query parameter to a method
CInjects beans into controller
DValidates request parameters
Lời giải
Annotation @RequestBody được sử dụng để ánh xạ cơ thể yêu cầu (request body) sang một đối tượng Java. Điều này cho phép bạn nhận dữ liệu từ cơ thể yêu cầu và ánh xạ nó sang một đối tượng Java, sau đó sử dụng đối tượng này trong phương thức của controller. Ví dụ, nếu bạn có một phương thức controller với một đối tượng Java như là tham số, annotation @RequestBody sẽ ánh xạ dữ liệu từ cơ thể yêu cầu sang đối tượng đó. Điều này giúp bạn dễ dàng xử lý dữ liệu từ cơ thể yêu cầu và sử dụng nó trong ứng dụng của mình.
Mở trang câu hỏi này →
12Which annotation would you use to create a REST endpoint that consumes only XML data?4 lựa chọnTrung bình40% trả lời đúng
A@RequestMapping(produces = "application/xml")
B@GetMapping(consumes = "application/json")
C@PostMapping(produces = "application/json")
D@PostMapping(consumes = "application/xml")
Lời giải

Để tạo một điểm cuối REST chỉ chấp nhận dữ liệu XML, bạn cần sử dụng annotation @PostMapping với thuộc tính consumes được đặt thành "application/xml". Điều này cho phép Spring MVC chỉ chấp nhận yêu cầu HTTP POST có nội dung dạng XML. Ví dụ, nếu bạn muốn tạo một điểm cuối REST để tạo mới một tài nguyên, bạn có thể sử dụng annotation @PostMapping với consumes được đặt thành "application/xml" như sau: @PostMapping(consumes = "application/xml")

Lời giải
public ResponseEntity<Resource> createResource(@RequestBody Resource resource) {
  ...
}

Trong ví dụ trên, điểm cuối REST sẽ chỉ chấp nhận yêu cầu HTTP POST có nội dung dạng XML, và sẽ sử dụng phương thức createResource để xử lý yêu cầu đó.

Mở trang câu hỏi này →
A@JsonRequest
B@PostMapping with @RequestBody and @ResponseBody
C@Consumes and @Produces
D@RequestBody
Lời giải

Để định nghĩa một phương thức xử lý cả hai định dạng yêu cầu và phản hồi JSON, chúng ta cần sử dụng các annotation @PostMapping, @RequestBody và @ResponseBody. @PostMapping được sử dụng để chỉ định phương thức HTTP được sử dụng để gửi yêu cầu đến server. @RequestBody được sử dụng để ánh xạ dữ liệu từ yêu cầu HTTP sang một đối tượng Java. @ResponseBody được sử dụng để ánh xạ một đối tượng Java sang dữ liệu HTTP. Ví dụ, nếu chúng ta muốn tạo một phương thức xử lý yêu cầu và phản hồi JSON, chúng ta có thể sử dụng các annotation như sau: @PostMapping(value = "/example", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)

Lời giải
public ResponseEntity<String> example(@RequestBody String request) {
    // Xử lý yêu cầu và trả về phản hồi
    return ResponseEntity.ok("Phản hồi từ server");
}

Bằng cách sử dụng các annotation này, chúng ta có thể định nghĩa một phương thức xử lý cả hai định dạng yêu cầu và phản hồi JSON.

Mở trang câu hỏi này →
14What is the effect of using @RestController instead of @Controller?4 lựa chọnDễ100% trả lời đúng
AIt forces methods to return HTML views
BIt applies @ResponseBody to all methods by default
CIt disables automatic serialization
DIt disables exception handling
Lời giải
Khi sử dụng @RestController thay vì @Controller, bạn sẽ thấy một số thay đổi quan trọng. @RestController là một annotation đặc biệt trong Spring MVC, được thiết kế để tạo ra các RESTful API. Nó có tác dụng tự động áp dụng @ResponseBody cho tất cả các phương thức trong lớp, điều này có nghĩa là bất kỳ phương thức nào cũng sẽ trả về dữ liệu JSON hoặc XML theo mặc định. Điều này giúp giảm thiểu sự phức tạp khi tạo ra các API RESTful, vì bạn không cần phải thêm @ResponseBody vào từng phương thức. Ngoài ra, @RestController cũng tự động áp dụng các quy tắc về dữ liệu trả về, giúp đảm bảo rằng dữ liệu được trả về đúng định dạng và cấu trúc.
Mở trang câu hỏi này →
15What does ResponseEntity provide in a REST controller method?4 lựa chọnDễ100% trả lời đúng
AA flexible way to set body, status, and headers
BOnly status codes
CA way to redirect to views
DOnly body
Lời giải
Trong REST controller, ResponseEntity cung cấp một cách linh hoạt để thiết lập cơ thể, trạng thái và tiêu đề của phản hồi. Điều này cho phép bạn có nhiều quyền kiểm soát hơn đối với phản hồi của ứng dụng, bao gồm cả việc thiết lập trạng thái HTTP cụ thể, thêm tiêu đề tùy chỉnh và thiết lập cơ thể phản hồi theo cách mong muốn. Điều này đặc biệt hữu ích khi bạn cần trả về một phản hồi phức tạp hoặc cần thiết lập trạng thái HTTP cụ thể để thông báo cho khách hàng về kết quả của yêu cầu.
Mở trang câu hỏi này →
16How can you bind a custom header value from a request to a method parameter?4 lựa chọnTrung bình67% trả lời đúng
A@HeaderParam
B@RequestHeader
C@RequestBody
D@RequestParam
Lời giải
Để gắn giá trị của một tiêu đề tùy chỉnh từ một yêu cầu đến một tham số phương thức, bạn có thể sử dụng annotation @RequestHeader. Annotation này cho phép bạn gắn giá trị của một tiêu đề tùy chỉnh từ yêu cầu HTTP đến một tham số phương thức của phương thức hiện tại. Ví dụ, nếu bạn muốn gắn giá trị của tiêu đề 'Authorization' đến một tham số phương thức 'token', bạn có thể sử dụng @RequestHeader('Authorization') ở trên tham số phương thức 'token'.
Mở trang câu hỏi này →
A@RequestMapping
B@Autowired
C@RestController
D@Entity
Lời giải

Để inject một Spring Data JPA repository vào một service hoặc controller, chúng ta sử dụng annotation @Autowired. Annotation này cho phép Spring tự động inject các bean vào các field hoặc setter của class. Điều này giúp giảm thiểu sự phức tạp khi viết mã và tăng cường tính tái sử dụng của code. Ví dụ, nếu chúng ta có một interface được tạo bởi Spring Data JPA, như sau:

Lời giải
public interface UserRepository extends JpaRepository<User, Long> {}

Thì chúng ta có thể inject nó vào một service như sau: @Service

Lời giải
public class UserService {

@Autowired

Lời giải
 private UserRepository userRepository;

}

Trong ví dụ trên, Spring sẽ tự động inject UserRepository vào UserService.

Mở trang câu hỏi này →
ALayered System
BCode on Demand
CStateless
DCacheable
Lời giải
Mô hình REST có nguyên tắc đảm bảo rằng mỗi yêu cầu từ client đến server phải chứa tất cả thông tin cần thiết để hiểu và xử lý yêu cầu. Nguyên tắc này được gọi là 'Stateless'. Điều này có nghĩa là server không lưu trữ trạng thái của client và không dựa vào trạng thái đó để xử lý yêu cầu. Thay vào đó, mỗi yêu cầu phải chứa thông tin cần thiết để server có thể xử lý nó một cách độc lập. Điều này giúp tăng tính linh hoạt và khả năng mở rộng của hệ thống.
Mở trang câu hỏi này →
19Which HTTP method is safe (does not modify resources)?4 lựa chọnDễ83% trả lời đúng
AGET
BPOST
CPUT
DDELETE
Lời giải
HTTP phương thức an toàn (không thay đổi tài nguyên) là phương thức GET. Phương thức GET được sử dụng để yêu cầu thông tin từ máy chủ mà không cần phải tạo, cập nhật hoặc xóa bất kỳ tài nguyên nào. Nó thường được sử dụng để tải xuống dữ liệu, hiển thị trang web hoặc tải xuống tệp. Ví dụ, khi bạn nhập địa chỉ URL của một trang web vào trình duyệt, trình duyệt sẽ gửi một yêu cầu GET đến máy chủ để tải xuống trang web đó. Phương thức GET không gửi bất kỳ dữ liệu nào đến máy chủ và không thay đổi trạng thái của tài nguyên. Do đó, nó được coi là phương thức an toàn.
Mở trang câu hỏi này →
20Which HTTP method is idempotent?4 lựa chọnDễ75% trả lời đúng
AGET
BPUT
CBoth GET and PUT
DPOST
Lời giải
HTTP phương thức idempotent là phương thức có thể thực hiện nhiều lần mà không gây ra tác động khác biệt. Trong các phương thức HTTP, phương thức GET và PUT được coi là idempotent. Phương thức GET được sử dụng để lấy dữ liệu từ server, trong khi phương thức PUT được sử dụng để cập nhật dữ liệu trên server. Vì cả hai phương thức này đều không gây ra tác động khác biệt khi thực hiện nhiều lần, nên chúng được coi là idempotent. Ví dụ, nếu bạn thực hiện GET nhiều lần để lấy dữ liệu, bạn sẽ nhận được dữ liệu giống nhau mỗi lần. Tương tự, nếu bạn thực hiện PUT nhiều lần để cập nhật dữ liệu, dữ liệu sẽ được cập nhật một lần duy nhất. Điều này giúp đảm bảo tính toàn vẹn và ổn định của dữ liệu trên server.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

2 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.